Kafka深度健康检查

问题描述 投票:0回答:2

我们最近遇到了一个问题,Kafka 代理遇到了阻止 IO 的内核问题(但我猜能够向 Zookeeper 发送心跳)。这样做的结果是 Kafka Broker 留在 ISR 集中,但实际上无法完成任何任务。

问题是: 1)有没有关于Kafka在发出心跳之前检查什么的文档,或者它只是愚蠢地发出心跳(我看到https://cwiki.apache.org/confluence/display/KAFKA/A+Guide+To+The +Kafka+协议,但是好像只是提到了协议,没有讲心跳前实际检查的内容)。

2)就我而言,即使所有请求都失败,Kafka 仍在心跳。有没有办法在Kafka中使用更深的心跳来检查请求成功率等?或者我们是否需要使用外部工具,例如https://github.com/pinterest/doctorkafkahttps://www.slideshare.net/JiangjieQin/introduction-to-kafka-cruise-control-68180931 https://github.com/yahoo/kafka-manager

apache-kafka streaming message-queue kafka-producer-api
2个回答
0
投票

对于第二点,Kafka 代理会发出大量指标。如果在您的情况下,代理停止处理请求,那么从许多指标中应该可以明显看出这一点,例如每秒的基本字节输入/输出或网络/磁盘 IO。

始终监控您的 Kafka 集群非常重要,以便能够了解当事情停止工作时发生了什么。网上有几篇好文章列出了最重要的 Kafka、主机和 JVM 指标,例如:

关于你的第一个问题,我不知道你在问什么。您链接到的页面是 Kafka 协议。它仅详细说明 Kafka 客户端和代理如何交互。它不涵盖 Kafka 和 Zookeeper 之间的任何交互。


0
投票

我们在 kubernetes 中为 Kafka 构建了以下健康检查机制,这解决了我们之前的很多问题。

startupProbe:
exec:
  command:
    - sh
    - '-c'
    - >
      [[ "$(kafka-broker-api-versions --bootstrap-server
      localhost:9092 | grep 9092 | wc -l)" == "3" ]] || { echo >&2
      "Broker count is not 3"; exit 1; } && [[ "$(curl -s
      kafka-controller-headless.my-namespace:9102/metrics
      | grep
      kafka_controller_kafkacontroller_preferredreplicaimbalancecount
      | tail -n 1 | grep -o '[^ ]\+$')" == "0.0" ]] || { echo >&2
      "Replica Imbalance not 0"; exit 1; }

这里的“kafka-controller-headless.my-namespace”是“控制器”(KRAFT)的kubernetes服务名称

它的作用是:

  • 它将首先检查代理计数是否匹配(我们的设置为 3)
  • 然后它还会检查“副本不平衡”是否为零 - 这可以防止代理在集群达到平衡之前不会停机
© www.soinside.com 2019 - 2024. All rights reserved.