一、基础命令行监控(原生工具)
Kafka自带多组命令行工具,可直接在Linux终端使用,无需额外安装组件,适合快速检查集群状态:
ps -ef | grep kafka或jps | grep kafka列出所有Kafka相关Java进程;使用systemctl status kafka确认Kafka服务是否处于“active (running)”状态。kafka-topics.sh --list --bootstrap-server <broker-host>:9092列出所有主题;kafka-topics.sh --describe --topic <topic-name> --bootstrap-server <broker-host>:9092查看指定主题的分区数、副本因子、ISR(同步副本)列表等配置信息。kafka-consumer-groups.sh --list --bootstrap-server <broker-host>:9092列出所有消费者组;kafka-consumer-groups.sh --describe --group <group-name> --bootstrap-server <broker-host>:9092查看消费者组的消费速率、偏移量提交情况、消息滞后(Lag)等关键指标。kafka-configs.sh --bootstrap-server <broker-host>:9092 --entity-type brokers --entity-name <broker-id> --describe查看指定Broker的配置参数(如log.retention.hours、num.partitions等)。二、JMX监控(指标采集核心)
Kafka通过JMX(Java Management Extensions)暴露了大量性能指标(如吞吐量、延迟、磁盘使用率等),需通过JMX客户端工具连接Broker的JMX端口进行监控:
jconsole后,在“远程进程”中输入service:jmx:rmi:///jndi/rmi://<broker-host>:<jmx-port>/jmxrmi(默认JMX端口为9999,需在kafka-server.properties中配置jmx.port=9999),即可实时查看Broker的CPU使用率、内存占用、线程数及Kafka特定指标(如kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec)。rules.json文件定义需要采集的指标(如kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec),通过bin/jmxtrans.sh --jmx-url service:jmx:rmi:///jndi/rmi://<broker-host>:<jmx-port>/jmxrmi --rules /path/to/rules.json启动导出。三、第三方监控工具(推荐方案)
第三方工具提供可视化、告警、集中化管理能力,是企业级监控的主流选择:
docker run -d -p 9308:9308 --name kafka-exporter danielqsj/kafka-exporter --kafka.server=<broker-host>:9092。prometheus.yml中添加job,抓取kafka_exporter的指标:scrape_configs:
- job_name: 'kafka-exporter'
static_configs:
- targets: ['<kafka-exporter-host>:9308']
./bin/cmak -Dkafka.version=<version> -Dzk.connect=<zookeeper-host>:2181启动,访问http://<host>:9000即可使用。http://<host>:8000/v3/kafka/<cluster>/consumer/<group>/lag接口获取消费者Lag数据,支持邮件、Slack告警。四、自定义监控脚本(灵活扩展)
若需定制化监控(如特定业务指标),可通过Kafka Java客户端编写脚本,采集并处理指标:
kafka-consumer-groups.sh命令,定期检查消费者Lag,超过阈值时发送告警(如邮件、短信)。示例脚本:#!/bin/bash
GROUP="my-group"
BROKER="localhost:9092"
LAG_THRESHOLD=1000
LAG=$(kafka-consumer-groups.sh --bootstrap-server $BROKER --describe --group $GROUP | awk -F' ' '{print $5}' | tail -n 1)
if [ "$LAG" -gt "$LAG_THRESHOLD" ]; then
echo "Consumer group $GROUP lag is $LAG, exceeding threshold $LAG_THRESHOLD" | mail -s "Kafka Consumer Lag Alert" admin@example.com
fi
五、核心监控指标(需重点关注)
MessagesInPerSec、BytesInPerSec)、延迟(RequestLatencyAvg)、磁盘使用率(LogDirSize)、网络连接数(NetworkRequestsPerSec)、日志文件大小(LogFileSize)。UnderReplicatedPartitions、MessagesBehind)、副本状态(ISRCount、LeaderCount)、Leader选举频率(LeaderElectionRate)。ConsumptionRate)、偏移量提交情况(LastCommitTime)、延迟(Lag)。