在 Linux 上监控 Kafka,通常从 Kafka 自身指标、操作系统、JVM、以及上下游依赖 四个层面来做。下面给你一套实用、可落地的监控方案。
通过 JMX 暴露(默认端口 9999,建议显式开启)。
| 指标 | 说明 | 关注点 |
|---|---|---|
| UnderReplicatedPartitions | 副本未同步分区数 | ≠0 表示异常 |
| OfflineLogDirectoryCount | 离线日志目录 | 磁盘问题 |
| ActiveControllerCount | 活跃 Controller | 应为 1 |
| RequestHandlerAvgIdlePercent | 请求线程空闲率 | <20% 说明压力大 |
| NetworkProcessorAvgIdlePercent | 网络线程空闲率 | 低说明网络瓶颈 |
| BrokerState | Broker 状态 | RUNNING |
| 指标 | 说明 |
|---|---|
| MessagesInPerSec | 消息写入速率 |
| BytesInPerSec / BytesOutPerSec | 流量 |
| FetchMessageConversions | 消费转换次数 |
| LogEndOffset | 分区最新 offset |
| Lag(消费者) | 消费延迟(最关键) |
✅ 最常用、最重要的监控项
kafka-consumer-groups.shkafka-consumer-groups.sh \
--bootstrap-server localhost:9092 \
--describe --group my-group
关注:
LAG 是否持续增长CURRENT-OFFSET 是否变化| 项目 | 工具 |
|---|---|
| CPU | top / htop |
| 内存 | free / vmstat |
| 磁盘 IO | iostat / iotop |
| 网络 | sar / iftop |
| 文件句柄 | lsof / ulimit |
✅ Kafka 对 磁盘 IO 和文件句柄 非常敏感。
Kafka → JMX Exporter → Prometheus → Grafana
1️⃣ 启动 Kafka 时开启 JMX
export JMX_PORT=9999
2️⃣ 使用 JMX Exporter
jmx_prometheus_javaagent.jarKAFKA_OPTS="-javaagent:/path/jmx_prometheus_javaagent.jar=7071:/path/kafka.yml"
3️⃣ Prometheus 抓取
- job_name: kafka
static_configs:
- targets: ["localhost:7071"]
4️⃣ Grafana 展示
✅ 生产环境强烈推荐
Kafka 日志路径:
/var/log/kafka/
关注:
✅ 必须告警:
✅ 建议告警:
# Broker 列表
kafka-broker-api-versions.sh --bootstrap-server localhost:9092
# Topic 详情
kafka-topics.sh --bootstrap-server localhost:9092 --describe
# 消费延迟
kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group xxx
# 查看线程/内存
jstat -gc <pid>
top -H -p <pid>
✅ 最佳实践
Kafka
+ JMX Exporter
+ Prometheus
+ Grafana
+ Alertmanager
+ 日志系统
如果你愿意,我可以:
你现在用的是 Kafka 几?单节点还是集群?