使用内置命令监控 Kafka 健康状态的最佳实践

使用 Kafka CLI 命令检查主题复制、消费者滞后、代理 API 状态以及集群基本健康状况,以便在事件发生时快速响应。

使用内置命令监控 Kafka 健康状态的最佳实践

Kafka 的内置命令是回答基本事件问题的最快方式:分区是否有领导者、副本是否同步、消费者是否落后。它们不能替代 Prometheus、JMX 或托管监控平台,但在堡垒机或管理容器中进行快速检查时非常有用。

以下示例使用 --bootstrap-server,这是当前 Kafka 管理命令的客户端路径。

设置清晰的命令环境

将代理列表保存在变量中,以便每个命令可重复执行:

export KAFKA_HOME=/opt/kafka
export BOOTSTRAP_SERVER="kafka1:9092,kafka2:9092,kafka3:9092"
cd "$KAFKA_HOME/bin"

如果集群使用 TLS 或 SASL,将客户端设置保存在属性文件中,并通过 --command-config 传递:

./kafka-topics.sh \
  --bootstrap-server "$BOOTSTRAP_SERVER" \
  --command-config /etc/kafka/admin-client.properties \
  --list

检查主题和分区健康状态

kafka-topics.sh --describe 开始。健康主题的每个分区应有领导者,并且同步副本列表应与预期的复制因子匹配。

./kafka-topics.sh \
  --bootstrap-server "$BOOTSTRAP_SERVER" \
  --describe \
  --topic orders

关注以下字段:

  • Leader:不应为 none
  • Replicas:分配给分区的代理。
  • Isr:当前与领导者同步的副本。

如果 Replicas 有三个代理但 Isr 只有一个,则主题副本不足。这通常指向代理宕机、磁盘压力、网络问题或无法跟上进度的副本。

快速查找副本不足的分区

当需要快速进行集群范围检查时,使用内置过滤器:

./kafka-topics.sh \
  --bootstrap-server "$BOOTSTRAP_SERVER" \
  --describe \
  --under-replicated-partitions

无输出是好消息。任何输出都值得调查,尤其是对于配置了 min.insync.replicas 以增强持久性的主题。

监控消费者滞后

消费者滞后告诉你消费者组是否跟上了生产记录。

./kafka-consumer-groups.sh \
  --bootstrap-server "$BOOTSTRAP_SERVER" \
  --describe \
  --group payments-worker

重要列包括:

  • CURRENT-OFFSET:组已提交的进度位置。
  • LOG-END-OFFSET:分区中的最新偏移量。
  • LAG:两者之间的差值。
  • CONSUMER-IDHOSTCLIENT-ID:拥有该分区的消费者。

短暂的峰值在部署或流量突发期间可能是正常的。持续滞后意味着组需要关注:处理缓慢、消费者数量不足、分区不平衡、下游依赖延迟或代理端获取延迟。

列出活跃消费者组

当不知道组名时,先列出组:

./kafka-consumer-groups.sh \
  --bootstrap-server "$BOOTSTRAP_SERVER" \
  --list

然后检查映射到受影响应用程序的组。

检查代理 API 可达性

kafka-broker-api-versions.sh 是确认客户端能否到达代理并完成元数据/API 握手的简单方法。

./kafka-broker-api-versions.sh \
  --bootstrap-server "$BOOTSTRAP_SERVER"

如果失败,请检查 DNS、安全组或防火墙、TLS/SASL 设置,以及广告监听地址是否可从运行命令的位置访问。

在事件期间使用 CLI 检查

实用的故障排查流程如下:

  1. 运行 kafka-broker-api-versions.sh 确认连接性。
  2. 运行 kafka-topics.sh --describe --under-replicated-partitions 检查复制健康状态。
  3. 描述受影响的主题并验证领导者和 ISR。
  4. 描述受影响的消费者组并按分区检查滞后。
  5. 将慢分区与代理、磁盘和应用程序日志进行比较。

要点

Kafka 的内置命令为你提供了集群健康状态的可靠初步了解。准备好管理客户端配置,使用 --bootstrap-server,并关注领导者、ISR、副本不足的分区和消费者滞后。一旦 CLI 显示问题所在,更深入的代理指标和日志就更容易解读了。