Вызывает ли попытка обработать сообщение kafka навсегда потребительский баланс - PullRequest
0 голосов
/ 16 октября 2019

У меня есть потребительский метод kafka, аннотированный @kafkalistener. Я установил шаблон повторных попыток для контейнера, и конфигурация повторных попыток такова, что она всегда будет повторяться для пары исключений, если они возникнут при обработке сообщения. Я установил для max-poll-records значение 1. Если такая ситуация возникает в режиме реального времени, а потребитель продолжает повторять попытку сообщения вечно, подумает ли брокер, что этот потребитель мертв, и вызовет перебалансировку? Или при повторной попытке потребитель запрашивает ту же ошибку, которую не удалось обработать? Если это правда, так как опрос происходит, я не буду перебалансировать, это мое предположение. Также я вручную фиксирую смещения, поэтому мое свойство enable.auto.commit имеет значение false, а ack-mode - ручной. Кто-нибудь может уточнить, пожалуйста? Заранее спасибо.

1 Ответ

0 голосов
/ 16 октября 2019

Да, при использовании повторения без сохранения состояния (по умолчанию) на уровне адаптера слушателя, это приведет к перебалансировке при превышении max.poll.interval.ms.

Вам следует использовать Stateful Retry вместо этого.

В этом случае исключение выдается в контейнер, и SeekToCurrentErrorHandler повторно ищет необработанные разделы (включая ошибочную запись). Вам все еще нужно убедиться, что наибольшее время отката меньше интервала опроса. Нет необходимости устанавливать max.poll.records в 1, поскольку поиск выполняется на всех необработанных разделах.

Начиная с версии 2.3, вы можете исключить повторные попытки на уровне слушателя и просто использовать SeekToCurrentErrorHandler.

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