Offset в Kafka — это монотонно увеличивающийся числовой идентификатор сообщения внутри конкретного раздела (partition), определяющий его позицию в потоке. Он не является глобальным для всего топика, а уникален только в рамках одного partition. Потребители используют offset, чтобы понимать, какие сообщения уже прочитаны и с какого места продолжать обработку.
В Apache Kafka каждый топик разбивается на один или несколько разделов (partitions). Внутри каждого раздела сообщения упорядочены по времени записи и получают целочисленный идентификатор, начиная с нуля; это число и называется offset. Поэтому каждое сообщение в Kafka однозначно определяется комбинацией (partition, offset), а не только самим offset.
Основные свойства offset:
Для потребителей offset — это маркер прогресса обработки. Consumer последовательно читает сообщения, двигаясь по offset: например, от 0 до 99, затем от 100 и дальше. После успешной обработки определённого набора сообщений он сохраняет (коммитит) последний обработанный offset и при перезапуске начинает чтение с следующего offset, не теряя и не дублируя данные (если логика коммита настроена корректно).
Работа с offset важна и с точки зрения отказоустойчивости:
KafkaConsumer в Java) может автоматически периодически коммитить offset-ы, либо вы можете делать это вручную после того, как сообщение действительно обработано.Таким образом, offset — фундаментальное понятие в Kafka: он определяет порядок сообщений в разделе, позволяет надёжно отслеживать прогресс потребителей и даёт возможность повторного чтения данных без сложных дополнительных механизмов.
Отметьте свой прогресс