PRO

Что такое consumer group в Kafka? Как работает offset?

Consumer group, или группа получателей, позволяет нескольким экземплярам приложения совместно обрабатывать одну тему Kafka: каждый раздел в рамках одной группы читает только один получатель. Offset — порядковый номер сообщения внутри раздела; группа сохраняет обработанный offset, чтобы после перезапуска продолжить чтение с нужной позиции.
Подробный ответ

Что такое consumer group

Группа получателей объединяет несколько экземпляров одного логического приложения. Kafka распределяет разделы темы между участниками группы. Один раздел одновременно обрабатывает только один получатель из одной группы, поэтому обработка масштабируется без дублирования сообщений внутри этой группы.

Topic: orders
Partitions: 0, 1, 2

Consumer group: billing
  Consumer A -> partition 0
  Consumer B -> partition 1
  Consumer C -> partition 2

Consumer group: analytics
  Consumer X -> partitions 0, 1, 2

Разные группы могут независимо читать одну и ту же тему. Например, billing и analytics получают одинаковые события, но хранят собственные позиции чтения.

Что такое offset

Offset — порядковый номер записи внутри конкретного раздела Kafka. Он не является глобальным номером во всей теме. После успешной обработки получатель сохраняет offset, чтобы при перезапуске продолжить чтение со следующего сообщения.

Partition 0:
Offset 0 -> OrderCreated #101
Offset 1 -> OrderCreated #102
Offset 2 -> OrderCreated #103

Committed offset for billing group: 2

Когда фиксировать offset

Для семантики at-least-once offset фиксируют после успешной обработки сообщения. Если процесс упал до фиксации, Kafka передаст часть сообщений повторно. Если фиксировать offset до обработки, при сбое можно потерять сообщение.

Перераспределение разделов

Когда получатель добавляется, удаляется или перестаёт отвечать, Kafka выполняет перераспределение разделов между участниками группы. Во время этого процесса обработка части разделов может кратко приостановиться, поэтому обработчики должны быть готовы к повторной доставке и корректно завершать текущую работу.

Задержка группы

Задержка, или lag, — разница между последним доступным offset в разделе и последним обработанным offset группы. Растущая задержка означает, что получатели не успевают за потоком, и требует анализа производительности, числа разделов, количества экземпляров или проблем зависимостей.

Как ответить на собеседовании

Consumer group масштабирует обработку одной темы: каждый раздел в группе читает только один получатель. Offset — позиция сообщения внутри раздела, которую группа сохраняет после обработки. Для at-least-once фиксирую offset после успешного эффекта, поэтому допускаю повторную доставку и делаю обработчик идемпотентным. Также мониторю consumer lag как основной признак того, что обработчики не успевают.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге