Что такое consumer group в Kafka? Как работает 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 как основной признак того, что обработчики не успевают.
Оцени свой прогресс