Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检测处于僵尸状态的Kafka Streams应用程序_Java_Apache Kafka_Apache Kafka Streams_Confluent Platform - Fatal编程技术网

Java 如何检测处于僵尸状态的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

我们的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应用程序是否处于运行或重新分区状态,但这种情况下不起作用

因此,我有两个问题:

  • 在没有活动消费者的情况下,Kafka Streams应用程序是否会保持运行状态?如果是:为什么
  • 我们如何(以编程方式/通过指标)检测到卡夫卡流应用程序已进入没有活动消费者的僵尸状态
  • 在没有活动消费者的情况下,Kafka Streams应用程序是否会保持运行状态?如果是:为什么

    这取决于版本。在旧版本(2.1.x和更旧版本)中,Kafka流确实会保持运行状态,即使所有线程都死掉了。此问题在
    v2.2.0
    via中修复

    我们如何(以编程方式/通过指标)检测到卡夫卡流应用程序已进入没有活动消费者的僵尸状态

    即使在旧版本中,也可以在
    KafkaStreams
    客户端上注册未捕获的异常处理程序。每次
    StreamThreads
    死亡时都会调用此处理程序


    顺便说一句:在即将发布的2.6.0版本中,添加了一个新的指标
    活动流线程
    ,以跟踪正在运行的线程数:

    我们目前正在为我们的代理和客户端使用2.4.0,那么这会是一个bug吗?不幸的是,我们无法重现/找出消费者调查超时的原因,因为这种情况很少发生。感谢您提供跟踪垂死流线程的指针。我们将期待2.6.0的发布,看看在那之前是否可以使用未捕获的异常处理程序。还有一个后续问题:从我的日志中,我只知道属于流线程的消费者不再是消费者组的一部分。没有说明StreamThread已终止的日志消息。这可能是它仍然被认为在运行的原因吗?
    我们目前正在为我们的代理和客户使用2.4.0,那么这可能是一个bug吗?
    ——听起来很像<代码>没有说明StreamThread已死亡的日志消息。
    ->这可以解释它;只要线程没有消亡,它就应该尝试重新加入消费群体。因此,问题可能不在“客户端状态跟踪”中,而是在
    StreamThread
    中,由于某种原因被卡住了。。。