我们上一章介绍了中间件:Zookeeper,本章将介绍另外一个中间件:Kafka。目前这2个中间件都是基于JAVA语言的。
Kafka作为中间件,承担了很多业务,所以它的监控也是很重要的,今天我们就来谈谈Kafka的监控。
我们在前面ZooKeeper里面也使用到了这个JMX监控,Kafka作为一个JAVA应用也有对应的jmx监控,而且在ZooKeeper里面数据,也会显示当前节点是否开启了jmx监控。
# 设置 JMX 端口并启动 Kafka
export JMX_PORT=9999
export KAFKA_JMX_OPTS="-Djava.rmi.server.hostname=localhost -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false"
bin/kafka-server-start.sh config/server.properties#开启之前的zk数据和开启之后的zk数据
[zk: localhost:2181(CONNECTED) 59] get /kafka/brokers/ids/0
{"features":{},"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},"endpoints":["PLAINTEXT://192.168.31.143:9092"],"jmx_port":-1,"port":9092,"host":"192.168.31.143","version":5,"timestamp":"1748189878724"}
[zk: localhost:2181(CONNECTED) 60] get /kafka/brokers/ids/0
{"features":{},"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},"endpoints":["PLAINTEXT://192.168.31.143:9092"],"jmx_port":9999,"port":9092,"host":"192.168.31.143","version":5,"timestamp":"1748190623797"}
[zk: localhost:2181(CONNECTED) 61] 虽然jvm暴露很简单,但是如果要读取jvm数据则还需要借助额外工具,由于云原生的问题,所以我们这里还是以prometheus和grafana方式接入。
#下载JMX Exporter
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.18.0/jmx_prometheus_javaagent-0.18.0.jar准备exporter的配置文件,未Kafka启用备用。
vi /root/kafka.yml
lowercaseOutputName: true #转换大小写,符合规范
rules:
- pattern: ".*" #暴露所有jmx指标修改环境变量,启用jmx exporter,暴露端口为9090。
#具体路径和端口以现场为准
export KAFKA_OPTS="-javaagent:/root/jmx_prometheus_javaagent-0.18.0.jar=9090:/root/kafka.yml"
bin/kafka-server-start.sh config/server.properties
请求暴露的端口,就可以获得很多jvm的监控指标,有了exporter暴露的指标,我们就可以接入Grafana图表,下图就是我从Grafana官方下载的一个漂亮的图表。

https://grafana.com/grafana/dashboards/12483-kubernetes-kafka/