#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, где люди упоминали, что использование сообщений прекратилось из-за блокировки этого потока …. не уверен, что это основная причина