监控kafka需围绕jmx采集吞吐量(messagesinpersec、bytesin/outpersec、失败请求)与延迟(生产request-latency-avg、消费records-lag-max、networkprocessoravgidlepercent),结合动态基线与持续多采样告警策略实现精准响应。

监控Kafka核心指标如吞吐量与延迟,关键在于采集准确指标、设定合理阈值、建立可响应的告警通路。不依赖单一工具,而是围绕JMX暴露的数据源,用Prometheus+Grafana+JMX Exporter或kafka_exporter构成轻量可靠链路。
吞吐量指标怎么采和告警
吞吐量反映消息流转能力,重点看生产侧和消费侧是否匹配:
-
MessagesInPerSec(每秒入站消息数):JMX路径为
kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec,建议按业务基线设定浮动阈值——例如连续5分钟高于基线150%或低于50%,触发中等级别告警 - BytesInPerSec / BytesOutPerSec:对应网络带宽压力,若持续接近网卡上限(如90%),需排查大消息或突发流量
-
FailedProduceRequestsPerSec和
FailedFetchRequestsPerSec:失败请求突增往往早于吞吐下降,>0.5次/秒持续2分钟即应告警
延迟类指标必须盯紧这三处
延迟不是单点数值,而是分层可观测的链路状态:
-
生产延迟:
kafka.producer:type=producer-metrics,client-id=xxx下的request-latency-avg,>200ms持续5分钟说明Broker写入或磁盘IO异常 -
消费延迟(Lag):最常用
kafka.consumer:type=consumer-fetch-manager-metrics,client-id=xxx的records-lag-max,按业务容忍度设阈值(如实时场景>1000条即告警) -
网络空闲率:
kafka.network:type=SocketServer,name=NetworkProcessorAvgIdlePercent低于20%表明请求积压,是线程池瓶颈前兆
告警配置要避开两个坑
很多团队告警频繁却无效,问题常出在策略设计上:
- 避免静态阈值:比如固定设“Lag > 5000告警”,不如用动态基线(如过去1小时P95值×2)
- 避免单点触发:所有关键指标都应设置“持续N分钟 + 连续M次采样”双条件,防止瞬时抖动误报
- 关联告警降噪:当
UnderReplicatedPartitions > 0同时NetworkProcessorAvgIdlePercent ,优先标定为Broker级故障,而非单独推送两条告警
可视化与快速定位建议
光有告警不够,得让值班人一眼看懂问题在哪:
- Grafana里至少建三个面板:集群级吞吐趋势、各Topic分区Lag热力图、消费者组重平衡事件日志
- 点击告警通知里的链接,直接跳转到对应Topic+Consumer Group的kafka-ui详情页,查看实时偏移、提交频率、成员状态
- 把
LogFlushRateAndTimeMs和磁盘IO等待时间(如iostat的await)放在同一视图,能快速判断是刷盘慢还是存储本身瓶颈











