Гайды
Apache Kafka: топики, партиции и оффсеты
Брокер и кластер, топик и партиция, ключ и порядок, consumer groups, ISR, retention и гарантии доставки.
~11 мин чтения
Apache Kafka: основы — топики, партиции, оффсеты
Apache Kafka — распределённый журнал сообщений: записи упорядочены в пределах партиции, долговечны (ретенция) и масштабируются партициями. Этот гайд фиксирует термины для дальнейшего чтения официальной документации Kafka.
Простые очереди без распределённого лога — см. Redis Pub/Sub и очереди. Потоковая обработка в связке с БД — по тегам streaming и queue.
1. Брокер, кластер, метаданные
Брокер — процесс Kafka с данными и API. Кластер — несколько брокеров с общим cluster.id. Координация метаданных: исторически ZooKeeper, в новых релизах — режим KRaft (без ZooKeeper). Детали установки — в документации выбранной версии.
2. Топик (topic)
Топик — именованный поток одного типа событий: orders.events, telemetry.raw. Логически один топик физически разбит на партиции.
3. Партиция (partition)
Партиция — упорядоченный append-only лог. Порядок гарантируется только внутри одной партиции, не между партициями.
- Больше партиций → больше параллелизма записи и чтения (с оговорками по метаданным и FD).
- Слишком много партиций на брокер → нагрузка на контроллер.
Ключ сообщения отправляет одно значение ключа в одну и ту же партицию → упорядочивание по ключу (например, все события userId=42 подряд в одной партиции). Без ключа — распределение по партициям алгоритмом producer.
4. Оффсет (offset)
Оффсет — позиция внутри партиции (0, 1, 2, …). Consumer коммитит committed offset в рамках consumer group.
Оффсеты не глобальны: пара (topic, partition) задаёт свою шкалу.
5. Producer и Consumer
Producer пишет в топик. Consumer читает с партиции с выбранного оффсета. Consumer group делит партиции между участниками (rebalance при изменении состава группы).
6. Репликация и ISR
У партиции есть лидер и реплики. ISR (in-sync replicas) — реплики без критического отставания от лидера. Надёжность записи задаётся acks и min.insync.replicas.
7. Retention и compaction
Retention — хранение по времени или размеру (retention.ms, retention.bytes).
Log compaction — для топиков «последнее состояние по ключу» остаётся последняя запись на ключ.
8. Гарантии доставки (язык)
| Уровень | Смысл |
|---|---|
| at-most-once | Потери возможны, дубликатов нет |
| at-least-once | Дубликаты возможны, потерь нет при успешном commit |
| exactly-once | Строже, с транзакциями/идемпотентным producer и ценой сложности |
На практике часто at-least-once + идемпотентность обработчика.
9. Мини-словарь
| Термин | Кратко |
|---|---|
| Broker | Узел хранения и API |
| Topic / Partition | Логический поток / физический шард лога |
| Offset | Позиция в партиции |
| Consumer group | Распределение партиций между consumer'ами |
| Leader / ISR | Приём записи / синхронные реплики |
| Rebalance | Переназначение партиций при изменении группы |