Как обнаружить приложение Kafka Streams в состоянии zomb ie - PullRequest
3 голосов
/ 16 апреля 2020

Один из наших потребителей StreamThread из приложения Kafka Streams перешел в состояние зомба ie после создания следующего сообщения журнала:

[Consumer clientId = messages-processor-db9aa8a3-6c3b-453b-b8c8- 106bf2fa257d-StreamThread-1-потребитель, groupId = процессор уведомлений] Участник-процессор уведомлений-db9aa8a3-6c3b-453b-b8c8-106bf2fa257d-StreamThread-1-потребитель-b2b9eac3-c374-43e2-bbc3-d9163 отправитель запроса отправитель-запросчик группы 53 ***: 9092 (id: 2147483646 rack: null) из-за истечения времени ожидания опроса потребителей. Это означает, что время между последующими вызовами poll () было больше, чем настроенный max.poll.interval.ms, что обычно означает, что опрос l oop тратит слишком много времени на обработку сообщений. Вы можете решить эту проблему, увеличив max.poll.interval.ms или уменьшив максимальный размер пакетов, возвращаемых в poll () с max.poll.records.

Похоже, что у потребителя Kafka StreamThread есть покинул группу потребителей, но приложение Kafka Streams оставалось в состоянии RUNNING, не потребляя новых записей.

Я хотел бы обнаружить, что приложение Kafka Streams перешло в такое состояние зомба ie, чтобы оно могло быть закрыты и заменены новым экземпляром. Обычно мы делаем это с помощью проверки работоспособности Kubernetes, которая проверяет, находится ли приложение Kafka Streams в состоянии RUNNING или REPARTITIONING, но в данном случае это не работает.

Поэтому у меня два вопроса:

  1. Следует ли ожидать, что приложение Kafka Streams останется в состоянии РАБОТА, когда у него нет активных потребителей? Если да: почему?
  2. Как мы можем определить (программно / с помощью метрик), что приложение Kafka Streams перешло в такое состояние зомба ie, когда у него нет активного потребителя?

1 Ответ

1 голос
/ 19 апреля 2020

Следует ли ожидать, что приложение Kafka Streams останется в состоянии RUNNING, когда у него нет активных потребителей? Если да: почему?

Это зависит от версии. В более старой версии (2.1.x и более ранних) Kafka Streams действительно оставался бы в состоянии RUNNING, даже если все потоки умерли. Эта проблема исправлена ​​в v2.2.0 через https://issues.apache.org/jira/browse/KAFKA-7657.

Как мы можем определить (программно / через метрики), что приложение Kafka Streams вошло в такого зомба ie состояние, в котором у него нет активного потребителя?

Даже в более старых версиях вы можете зарегистрировать необработанный обработчик исключений на клиенте KafkaStreams. Этот обработчик вызывается каждый раз, когда StreamThreads умирает.

Кстати: в следующем выпуске 2.6.0 добавлен новый показатель c alive-stream-threads для отслеживания количества запущенных потоков: https://issues.apache.org/jira/browse/KAFKA-9753

...