Вопрос проверяет понимание механизма consumer-групп и того, как Kafka отслеживает прогресс чтения сообщений.
Offset’ы consumer-групп хранятся в специальном внутреннем топике Kafka. Этот топик называется __consumer_offsets. Kafka сама управляет его репликацией и надёжностью. Consumer периодически коммитит offset’ы в этот топик. Благодаря этому прогресс чтения сохраняется даже при сбоях.
Offset — это ключевая часть модели потребления Kafka.
Offset — это позиция consumer’а в partition, указывающая, какое сообщение будет прочитано следующим.
В современных версиях Kafka:
Offset’ы хранятся в топике __consumer_offsets
Это обычный Kafka-топик
Он:
реплицируется
партиционируется
управляется брокером
Consumer может коммитить offset’ы:
Автоматически
enable.auto.commit=true
периодический коммит
Вручную
commitSync
commitAsync
Коммит означает:
запись offset’а в __consumer_offsets
для конкретной consumer-группы и partition
Consumer может упасть
Consumer может переехать на другой инстанс
Группа должна восстановиться автоматически
Offset’ы — это часть состояния consumer-группы и хранятся внутри Kafka. Это делает систему отказоустойчивой и масштабируемой.