Кафка сбрасывает смещения на самые ранние - PullRequest
0 голосов
/ 18 ноября 2018

Я использую Kafka (версия 0.10.2) с Spring-data (версия 1.5.1.RELEASE), Spring-kafka (версия 1.1.1.RELEASE).

У меня есть тема, из которой опрашивается одна группа потребителей. Я заметил, что иногда, когда один потребитель перезапускает, отставание темы мгновенно превращается в гораздо большее число. После некоторых исследований я пришел к выводу, что Кафка перезапускает смещения, но я не могу понять, почему.

enable.auto.commit = true
auto.commit.interval.ms = 5000
auto.offset.reset = smallest
log.retention.hours=168

Задержка обычно очень низкая (ниже 500) и расходуется в течение нескольких мс, поэтому она не может быть индексом вне диапазона (или может?)

Может, у кого-то есть идея?

1 Ответ

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

Я не думаю, что это на самом деле фиксирует смещения так часто, как вы ожидаете, поэтому, когда потребитель перезапускается, группа перебалансируется, а затем берет самое последнее смещение с автоматическим подтверждением.

Передача происходит только периодически (5 секунд, в зависимости от конфигурации), а не на основе сообщений на сообщения. Таким образом, следует ожидать, что дублированные данные получат не более 5 секунд, но не начало темы, если только смещения не фиксируются вообще (для этого необходимо настроить простое ведение журнала log4j на клиентах)

Если вы хотите более точное управление, отключите автоматическую фиксацию смещения и вызовите методы commitSync или commitAsync объекта Consumer (это методы основного Java API, не уверен насчет Spring)

Одним из вариантов может быть обновление клиентов Spring, как говорит Гари ниже. Поскольку вы работаете с Kafka 0.10.2+, это не должно быть проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...