【问题标题】:How to detect a Kafka Streams app in zombie state如何检测处于僵尸状态的 Kafka Streams 应用程序
【发布时间】:2020-07-29 09:52:36
【问题描述】:

我们的一个 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 rack: null) 发送 LeaveGroup 请求已过期。这意味着后续调用 poll() 之间的时间比配置的 max.poll.interval.ms 长,这通常意味着轮询循环花费了太多时间来处理消息。您可以通过增加 max.poll.interval.ms 或通过使用 max.poll.records 减少 poll() 返回的批次的最大大小来解决此问题。

StreamThread 的 Kafka Consumer 似乎已经离开了消费组,但 Kafka Streams App 仍然处于 RUNNING 状态,没有消费任何新记录。

我想检测到 Kafka Streams 应用程序已进入这种僵尸状态,以便可以将其关闭并替换为新实例。通常,我们通过 Kubernetes 运行状况检查来验证 Kafka Streams 应用程序是否处于 RUNNING 或 REPARTITIONING 状态,但这不适用于这种情况。

因此我有两个问题:

  1. 当 Kafka Streams 应用程序没有活动的消费者时,它是否会保持在 RUNNING 状态?如果是:为什么?
  2. 我们如何检测(以编程方式/通过指标)Kafka Streams 应用已进入没有活跃消费者的僵尸状态?

【问题讨论】:

    标签: java apache-kafka apache-kafka-streams confluent-platform


    【解决方案1】:

    当 Kafka Streams 应用没有活跃的消费者时,它是否会保持在 RUNNING 状态?如果是:为什么?

    这取决于版本。在旧版本(2.1.x 和更早版本)中,Kafka Streams 确实会保持在 RUNNING 状态,即使所有线程都死了。此问题已通过https://issues.apache.org/jira/browse/KAFKA-7657v2.2.0 中修复。

    我们如何(以编程方式/通过指标)检测 Kafka Streams 应用已进入没有活跃消费者的僵尸状态?

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

    顺便说一句:在即将发布的 2.6.0 版本中,添加了一个新指标 alive-stream-threads 来跟踪正在运行的线程数:https://issues.apache.org/jira/browse/KAFKA-9753

    【讨论】:

    • 我们目前正在为我们的经纪人和客户使用 2.4.0,那么这可能是一个错误吗?不幸的是,我们无法重现/找出导致消费者轮询超时的原因,因为它很少发生。感谢您提供有关跟踪垂死流线程的指针。我们会期待 2.6.0 的发布,看看在此之前是否可以使用未捕获的异常处理程序。
    • 还有一个后续问题:从我的日志中我只知道属于流线程的消费者不再是消费者组的一部分。没有日志消息表明 StreamThread 已死亡。这可能是它仍然被认为是 RUNNING 的原因吗?
    • We are currently using 2.4.0 for our brokers and clients, so could this be a bug then? -- 听起来像。 There is no log message stating that the StreamThread has died. -> 可以解释;只要线程没有死,它应该尝试重新加入消费者组。所以也许问题不在于“客户端状态跟踪”,而在于StreamThread,由于某种原因被卡住了......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多