Kafka ConcurrentMessageListenerContainer внезапно прекращает потребление

#apache-kafka #spring-kafka

#apache-kafka #spring-kafka

Вопрос:

Я использую Spring kafka для получения сообщений с использованием ConcurrentMessageListenerContainer, в процессе производства я вижу, что он внезапно перестает потреблять сообщения без каких-либо ошибок, иногда даже один потребитель с виртуальной машиной перестает потреблять, в то время как другие потребители все еще потребляют (у меня 15 разделов и 3 JVM, каждый из которых имеет параллелизм 5).

Когда я перезапускаю JVM, он начинает потреблять!!!

В любом случае я могу периодически проверять, умер ли потребитель или что-то в этом роде, и я могу перезапустить его без перезапуска JVM!!

Ответ №1:

Скорее всего, поток-потребитель «застрял» где-то в вашем коде. Я предлагаю вам сделать дамп потока, когда это произойдет, чтобы посмотреть, что делает поток.

Комментарии:

1. Привет, Гэри …. это то, что я сделал, и увидел, что поток-потребитель действительно находится в заблокированном состоянии!! Следующий вопрос, как мы можем извлечь из этого какие-либо предложения?

2. Это зависит от того, на чем он заблокирован. Например, если он блокирует попытку чтения из сокета, вы можете установить тайм-аут для сокета (или закрыть его, чтобы вызвать ошибку).

3. Спасибо, Гэри ….. блокирующим потоком является kafka-coordinator-heartbeat-thread …. Я прошел через несколько потоков в stackoverflow, где люди упоминали, что использование сообщений прекратилось из-за блокировки этого потока …. не уверен, что это основная причина