Java 如何检测处于僵尸状态的Kafka Streams应用程序
我们的Kafka Streams应用程序的StreamThread使用者之一在生成以下日志消息后进入僵尸状态: [Consumer clientId=notification-processor-db9aa8a3-6c3b-453b-b8c8-106bf2fa257d-StreamThread-1-Consumer,groupId=notification processor]成员notification-processor-db9aa8a3-6c3b-453b-b8c8-106bf2fa257d-StreamThread-1-Consumer-b2b9eac3-c374-43e2-bbc3-d9ee514a3c16向协调员发送离开组请求****:9092(id:2147483646机架:null)由于消费者的原因,轮询超时已过期。这意味着对poll()的后续调用之间的时间比配置的max.poll.interval.ms长,这通常意味着轮询循环在处理消息方面花费了太多的时间。您可以通过增加max.poll.interval.ms或使用max.poll.records减少poll()中返回的批的最大大小来解决此问题 StreamThread的Kafka消费者似乎已离开消费者组,但Kafka Streams应用程序仍处于运行状态,同时未消费任何新记录 我想检测一个Kafka Streams应用程序已经进入这样的僵尸状态,这样它就可以被关闭并替换为一个新实例。通常,我们通过Kubernetes健康检查来验证Kafka Streams应用程序是否处于运行或重新分区状态,但这种情况下不起作用 因此,我有两个问题:Java 如何检测处于僵尸状态的Kafka Streams应用程序,java,apache-kafka,apache-kafka-streams,confluent-platform,Java,Apache Kafka,Apache Kafka Streams,Confluent Platform,我们的Kafka Streams应用程序的StreamThread使用者之一在生成以下日志消息后进入僵尸状态: [Consumer clientId=notification-processor-db9aa8a3-6c3b-453b-b8c8-106bf2fa257d-StreamThread-1-Consumer,groupId=notification processor]成员notification-processor-db9aa8a3-6c3b-453b-b8c8-106bf2fa257
v2.2.0
via中修复
我们如何(以编程方式/通过指标)检测到卡夫卡流应用程序已进入没有活动消费者的僵尸状态
即使在旧版本中,也可以在KafkaStreams
客户端上注册未捕获的异常处理程序。每次StreamThreads
死亡时都会调用此处理程序
顺便说一句:在即将发布的2.6.0版本中,添加了一个新的指标
活动流线程,以跟踪正在运行的线程数:我们目前正在为我们的代理和客户端使用2.4.0,那么这会是一个bug吗?不幸的是,我们无法重现/找出消费者调查超时的原因,因为这种情况很少发生。感谢您提供跟踪垂死流线程的指针。我们将期待2.6.0的发布,看看在那之前是否可以使用未捕获的异常处理程序。还有一个后续问题:从我的日志中,我只知道属于流线程的消费者不再是消费者组的一部分。没有说明StreamThread已终止的日志消息。这可能是它仍然被认为在运行的原因吗?我们目前正在为我们的代理和客户使用2.4.0,那么这可能是一个bug吗?
——听起来很像<代码>没有说明StreamThread已死亡的日志消息。
->这可以解释它;只要线程没有消亡,它就应该尝试重新加入消费群体。因此,问题可能不在“客户端状态跟踪”中,而是在StreamThread
中,由于某种原因被卡住了。。。