Потребитель Kafka не читает сообщение, отправленное производителем, если запущено после производителя - PullRequest
0 голосов
/ 05 ноября 2018

Я нашел свойство auto.offset.reset = самое раннее или auto.offset.reset = самое последнее.

Теперь вот мой сценарий с 1 темой, 1 разделом, 1 потребителем

Например, я начал продюсера. Продюсер отправил 100 записей в тему. Теперь я начинаю потребителя. Согласно свойству auto.offset.reset = самое раннее мой потребитель начнет читать запись с 0 индекса раздела. Теперь, если мой потребитель делает асинхронную фиксацию для 1-100 записей и отключается. Тем временем продюсер отправил еще 100 записей. Когда появится потребитель, он начнет читать сообщение с индекса индекса 0 или начнет читать с 101 индекса раздела и обработает запись от 101 до 200.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

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

Таким образом, когда ваш потребитель запускается снова (в той же группе потребителей!), Он продолжит чтение с последнего зафиксированного смещения (101 в вашем примере). auto.offset.reset определяет поведение в случае отсутствия информации в __consumer_offsets (у вас еще нет коммитов).

0 голосов
/ 05 ноября 2018

Смещение к этому не относится. Вы должны настроить его на свойство, прочитанное с начала. В Java есть что-то вроде seektobeginning

...