任何应用功能再强大、性能再优越,如果没有与之匹配的监控,那么一切都是虚无缥缈的。监控不仅可以为应用提供运行时的数据作为依据参考,还可以迅速定位问题,提供预防及告警等功能,很大程度上增强了整体服务的鲁棒性。
一、Kafka监控指标与获取
Kafka监控的4个维度:
- 集群信息
- broker信息
- topic信息
- consumer group信息
使用JConsole访问JMX
(1)终端输入jconsole
,启动Java监视和管理控制台。
(2)修改kafka-run-class.sh,使JConsole可以通过远程连接。
KAFKA_JMX_OPTS="
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=服务器的IP地址或者域名"
(3)修改kafka-server-start.sh,增加export JMX_PORT="9999"
if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
export JMX_PORT="9999"
fi
(4)检查是否开启JMX
broker在启动过程中,始终会将JMX端口信息写入Kafka对应的位置.
(5)连接
(6)查看MBean
MBean的名称,xxx.type=yyy,{attr} = zzz
其中xxx指的是组件名,如xxx = kafka.server
zzz 和 attr 指的是MBean的范围,例如topic = test,表示该MBean的作用范围是名为test的topic。
指标分类:
- kafka.server 服务器端JMX指标
- kafka.network 网络相关JMX指标
- kafka.log 分区日志相关JMX指标
- kafka.controller controller相关指标
使用Java程序访问JMX
(1)监控broker一分钟消息流入的速度
kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec
OneMinuteRate 表示某个broker一分钟消息流入的速度(messages/s)。
public class KafkaJmxDemo {
private MBeanServerConnection conn;
private String jmxUrl;
private String ipAndPort;
public KafkaJmxDemo(String ipAndPort) {
this.ipAndPort = ipAndPort;
}
/**
* 初始化JMX连接
*
* @return
*/
public