Гайды

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Переназначение партиций при изменении группы

Дальше по теме