10.7.1 监控指标体系与关键KPI
监控指标体系需要覆盖业务可用性、吞吐、延迟、可靠性与容量五大目标,并与SLA/SLO对齐。关键KPI应能快速反映生产与消费链路的健康度,支撑容量评估和故障定位。建议按集群、Broker、Topic/Partition、Producer/Consumer四个层面分层采集与聚合。
集群级KPI
- 生产与消费总吞吐:BytesIn/BytesOut、MessagesIn。用于评估峰值与容量余量。
- 端到端延迟:生产到消费P95/P99,结合业务SLO。
- ISR健康度:UnderReplicatedPartitions、IsrShrinks/IsrExpands。持续不为零需告警。
- 集群稳定性:Controller切换次数、Leader选举频率。过高代表不稳定或硬件波动。
Broker级KPI
- 资源使用:CPU、内存、磁盘IO、网络带宽;结合iowait与磁盘队列深度。
- 磁盘容量与增长速率:LogDir可用空间、LogFlush时间。
- 网络与请求:RequestHandlerAvgIdlePercent、NetworkProcessorAvgIdlePercent。
- 请求延迟:Produce/Fetch请求P95/P99;异常抖动提示瓶颈。
Topic/Partition级KPI
- 吞吐与热点:每主题/分区BytesIn/BytesOut,识别热点分区。
- 副本滞后:ReplicaLag、Leader偏移增长异常。
- 分区不平衡:Leader分布与负载偏差,影响整体吞吐。
Producer/Consumer级KPI
- 生产端:batch大小、buffer使用率、request重试率、错误率。
- 消费端:Consumer lag(按group/topic/partition),滞后增长速率。
- 消费延迟:处理时间与poll间隔,避免rebalance频繁发生。
监控落地示例(含安装、命令与预期效果)#
1)安装与开启JMX Exporter(Broker)
# 1. 下载JMX Exporter
mkdir -p /opt/jmx_exporter
cd /opt/jmx_exporter
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.20.0/jmx_prometheus_javaagent-0.20.0.jar
wget https://raw.githubusercontent.com/prometheus/jmx_exporter/master/example_configs/kafka-2_0_0.yml
# 2. 修改Kafka启动脚本,开启JMX Exporter
# 文件: /opt/kafka/bin/kafka-server-start.sh
# 在JAVA_OPTS中追加:
export KAFKA_OPTS="-javaagent:/opt/jmx_exporter/jmx_prometheus_javaagent-0.20.0.jar=7071:/opt/jmx_exporter/kafka-2_0_0.yml"
# 3. 启动Kafka
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
# 4. 验证Exporter端口
curl -s http://localhost:7071/metrics | head
预期效果:返回Prometheus格式指标文本,包含kafka_server_*、kafka_network_*等指标。
2)采集Broker级KPI(命令核对)
# 查看Broker磁盘使用
df -h /var/lib/kafka
# 查看Kafka数据目录热点文件增长
du -sh /var/lib/kafka/* | sort -h | tail -n 5
# 查看系统IO与CPU
iostat -x 1 5
top -H -p $(pgrep -f Kafka)
命令解释:
- df -h:确认LogDir剩余空间,对应容量预警。
- du -sh:快速识别热点Topic/分区目录。
- iostat -x:查看await、svctm判断磁盘瓶颈。
3)消费滞后KPI验证
# 查看消费组滞后
/opt/kafka/bin/kafka-consumer-groups.sh \
--bootstrap-server 127.0.0.1:9092 \
--describe --group order-group
# 预期输出包含:
# TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID
4)Topic/Partition热点检查
# 查看Topic分区分布
/opt/kafka/bin/kafka-topics.sh \
--bootstrap-server 127.0.0.1:9092 \
--describe --topic order-topic
# 查看Leader分布是否倾斜
告警规则示例(Prometheus)#
# 文件: /etc/prometheus/rules/kafka_kpi.yml
groups:
- name: kafka_kpi
rules:
- alert: KafkaUnderReplicatedPartitions
expr: kafka_server_replicamanager_underreplicatedpartitions > 0
for: 3m
labels:
severity: critical
annotations:
summary: "UnderReplicatedPartitions > 0"
description: "集群副本不足持续3分钟"
- alert: KafkaBrokerDiskUsageHigh
expr: (node_filesystem_size_bytes{mountpoint="/var/lib/kafka"} - node_filesystem_free_bytes{mountpoint="/var/lib/kafka"})
/ node_filesystem_size_bytes{mountpoint="/var/lib/kafka"} > 0.8
for: 5m
labels:
severity: warning
annotations:
summary: "Kafka磁盘使用率超过80%"
排错与应急操作(示例)#
# 1. ISR异常快速定位
grep -i "ISR" /opt/kafka/logs/server.log | tail -n 50
# 2. Controller频繁切换
grep -i "Controller" /opt/kafka/logs/server.log | tail -n 50
# 3. 发现热点分区后限流或扩分区
/opt/kafka/bin/kafka-topics.sh \
--bootstrap-server 127.0.0.1:9092 \
--alter --topic order-topic --partitions 12
说明:
- ISR异常通常与网络抖动、磁盘IO高或副本落后相关。
- 扩分区是缓解热点的短期手段,需评估业务分区键与消费并发。
练习#
- 安装JMX Exporter并确认能抓到
UnderReplicatedPartitions指标。 - 使用
kafka-consumer-groups.sh验证某消费组LAG随时间变化。 - 人为制造磁盘空间紧张(占用10GB),观察告警是否触发并记录处理流程。
- 通过扩分区缓解热点,比较扩容前后
BytesIn与请求P99变化。