Kafka потребительский сбой - PullRequest
1 голос
/ 27 февраля 2020

Мое приложение использует данные из Kafka 0.9.

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

Как мне справиться с таким типом сбоя приложения?

Есть ли какой-нибудь способ поддержать потребителей или охватить нового потребителя, если координатор обнаружит его мертвым?

Ответы [ 3 ]

1 голос
/ 27 февраля 2020

0,9 очень очень старый; в этой области было много улучшений. См. KIP-62 .

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

Если вы используете Spring для Apache Kafka, вы должны использовать хотя бы версию 1.3.10; более ранние версии больше не поддерживаются.

Текущая версия 2.4.3.

Если вы используете текущую версию spring-kafka, вам нужно уменьшить max.poll.records или увеличить max.poll.interval.ms.

1 голос
/ 27 февраля 2020

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

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

Существуют другие настройки для сердечных сокращений потребителя, но начните с этих

0 голосов
/ 27 февраля 2020

Вам нужно увеличить значение max.poll.interval.ms Это устанавливает верхнюю границу количества времени, в течение которого потребитель может бездействовать до получения большего количества записей. Для других конфигураций сердцебиения потребителя, пожалуйста, обратитесь к this

...