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:查看awaitsvctm判断磁盘瓶颈。

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高或副本落后相关。
- 扩分区是缓解热点的短期手段,需评估业务分区键与消费并发。


练习#

  1. 安装JMX Exporter并确认能抓到UnderReplicatedPartitions指标。
  2. 使用kafka-consumer-groups.sh验证某消费组LAG随时间变化。
  3. 人为制造磁盘空间紧张(占用10GB),观察告警是否触发并记录处理流程。
  4. 通过扩分区缓解热点,比较扩容前后BytesIn与请求P99变化。