Кафка теряет сообщение, если потребитель держит сообщение дольше, чем интервал автоматической фиксации? - PullRequest
0 голосов
/ 25 мая 2018

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

Если мое предположение верно, сообщение теряется, поскольку смещение зафиксировано, но само сообщение не было обработано?

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Предположим, что имя вашей группы потребителей - «Тест», и у вас есть один потребитель в группе потребителей.

Когда включена автоматическая фиксация, смещения фиксируются только во время вызовов poll () и при закрытии потребителя..

Например, auto.commit.interval.ms равен 5 секундам, а каждый вызов poll () занимает 7 секунд.При каждом вызове poll () он проверяет, истек ли интервал автоматической фиксации, если он, как в приведенном выше примере, передаст смещение.

Смещения также фиксируются во время закрытияПотребитель.

Из документации -

"Закройте потребителя, ожидая по умолчанию тайм-аут до 30 секунд для любой необходимой очистки. Если включена автоматическая фиксация, выполняется фиксация текущейсмещения, если это возможно, в течение времени ожидания по умолчанию ".

Подробнее об этом можно прочитать здесь -

https://kafka.apache.org/10/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html

Теперь, на ваш вопрос, если poll () неВызов снова или потребитель не закрыт, смещение не будет зафиксировано.

0 голосов
/ 25 мая 2018

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

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

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

...