【问题标题】:kafka-streams alert on kafka connection faliurekafka 连接失败时的 kafka-streams 警报
【发布时间】:2020-12-12 11:18:47
【问题描述】:

当 kafka-streams 应用程序运行时 Kafka 突然宕机,应用程序进入“等待”模式,发送警告日志的消费者和生产者线程无法连接,当 Kafka 恢复时,一切都应该(理论上)恢复正常。 我正在尝试就这种情况发出警报,但我无法找到捕获并发送日志/指标的地方。 我尝试了以下方法:

  1. streams.setUncaughtExceptionHandler 但这只发生在异常情况下,这里不是这种情况
  2. 扩展ProductionExceptionHandler 并将default.production.exception.handler 属性更改为我的扩展此接口的类。同样,与setUncaughtExceptionHandler 一样,这里没有抛出异常,所以什么都没有发生。

我知道 Kafka 有自己的指标,我可以听这些指标并找出代理是否已关闭。但在某些情况下,Kafka 代理很好,而我的 kafka-streams 应用程序无法连接(即身份验证配置错误或 vpn/vpc 问题)

我能做些什么来发现这些问题并记录/报告它们?

更新

如果 kafka 不可用,请查看消费者/生产者日志:

2020-08-24 21:41:32,055 [my-kafka-streams-app-23a462fe-28c6-415a-a08a-b11d3ffffc2e-StreamThread-1] WARN  o.apache.kafka.clients.NetworkClient - [] [Consumer clientId=my-kafka-streams-app-23a462fe-28c6-415a-a08a-b11d3ffffc2e-StreamThread-1-consumer, groupId=my-kafka-streams-app] Bootstrap broker localhost:9092 (id: -1 rack: null) disconnected
2020-08-24 21:41:32,186 [kafka-admin-client-thread | my-kafka-streams-app-23a462fe-28c6-415a-a08a-b11d3ffffc2e-admin] WARN  o.apache.kafka.clients.NetworkClient - [] [AdminClient clientId=my-kafka-streams-app-23a462fe-28c6-415a-a08a-b11d3ffffc2e-admin] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
2020-08-24 21:41:32,250 [kafka-producer-network-thread | my-kafka-streams-app-23a462fe-28c6-415a-a08a-b11d3ffffc2e-StreamThread-1-producer] WARN  o.apache.kafka.clients.NetworkClient - [] [Producer clientId=my-kafka-streams-app-23a462fe-28c6-415a-a08a-b11d3ffffc2e-StreamThread-1-producer] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
 

【问题讨论】:

  • 很好奇,在这些情况下,在等待或超时之后是否会引发任何异常?您提到记录的消息 - 这是否记录良好,是否记录了异常?这可能有助于确定您可以使用的回调,或者您甚至可以为此使用自定义日志处理。
  • 感谢您的评论,没有例外,只有“警告”日志消息。我可以在日志管理系统中对这些日志设置警报,但这将在我的代码之外。我可以以某种方式从我的应用程序中捕获它并以我想要的方式报告..
  • 您是否可以通过更新您的原始问题来分享这些日志(根据需要编辑)?这可能会让其他人了解您的应用程序中可能检测到的内容。
  • @javabrett 我已经用相关日志更新了我的问题,

标签: apache-kafka kafka-consumer-api apache-kafka-streams


【解决方案1】:

这种情况不容易以编程方式检测。问题是,客户端并没有真正将他们的状态暴露给 Kafka Streams,因此 Kafka Streams 并不真正了解断开连接。有 KIP 提议添加一个DISCONNECT 状态,但实现起来并不容易(参见https://cwiki.apache.org/confluence/display/KAFKA/KIP-457%3A+Add+DISCONNECTED+status+to+Kafka+Streams)。

您提到的异常处理程序对这种情况没有帮助,因为没有抛出异常(至少不在 Kafka Streams 代码库中)。

您可以尝试监控消费者延迟或一些 Kafka Streams 指标(如处理速率)。他们可能会提供足够好的代理。参见https://docs.confluent.io/current/streams/monitoring.html

【讨论】:

    猜你喜欢
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 2019-01-21
    • 2020-08-28
    • 1970-01-01
    • 2021-03-01
    相关资源
    最近更新 更多