天天看点

如何使用JMX监控Kafka

Kafka uses Yammer Metrics for metrics reporting in both the server and the client. This can be configured to report stats using pluggable stats reporters to hook up to your monitoring system. The easiest way to see the available metrics to fire up jconsole and point it at a running kafka client or server; this will all browsing all metrics with JMX.

可见kafka官方也是提倡使用jmx并且提供了jmx的调用给用户以监控kafka.

本博文通过使用jmx调用kafka的几个监测项属性来讲述下如何使用jmx来监控kafka.

有关Jmx的使用可以参考:

<a href="http://blog.csdn.net/u013256816/article/details/52800742">从零开始玩转JMX(一)——简介和Standard MBean</a>

<a href="http://blog.csdn.net/u013256816/article/details/52808328">从零开始玩转JMX(二)——Condition</a>

<a href="http://blog.csdn.net/u013256816/article/details/52817247">从零开始玩转JMX(三)——Model MBean</a>

<a href="http://blog.csdn.net/u013256816/article/details/52840067">从零开始玩转JMX(四)——Apache Commons Modeler &amp; Dynamic MBean</a>

在使用jmx之前需要确保kafka开启了jmx监控,kafka启动时要添加JMX_PORT=9999这一项,也就是:

博主自行搭建了一个kafka集群,只有两个节点。集群中有一个topic(name=default_channel_kafka_zzh_demo),分为5个partition(0 1 2 3 4).

这里讨论的kafka版本是0.8.1.x和0.8.2.x,这两者在使用jmx监控时会有差异,差异体现在ObjectName之中。熟悉kafka的同学知道,kafka有topic和partition这两个概念,topic中根据一定的策略来分为若干个partitions, 这里就以此举例来看,

在0.8.1.x中有关此项的属性的ObjectName(String值)为:

“kafka.log”:type=”Log”,name=”default_channel_kafka_zzh_demo-*-LogEndOffset”

而在0.8.2.x中有关的属性的ObjectName为:

kafka.log:type=Log,name=LogEndOffset,topic=default_channel_kafka_zzh_demo,partition=0

所以在程序中要区别对待。

这里采用三个监测项来演示如果使用jmx进行监控:

上面所说的offset (集群中的一个topic下的所有partition的LogEndOffset值,即logSize)

sendCount(集群中的一个topic下的发送总量,这个值是集群中每个broker中此topic的发送量之和)

sendTps(集群中的一个topic下的TPS, 这个值也是集群中每个broker中此topic的发送量之和)

首先是针对单个kafka broker的。

注意代码中对于两种不同kafka版本的区别处理。对应前面所说的三个检测项的方法为:

对于整个集群的处理需要另外一个类来保证,总体上是对集群中的每一个broker相应的值进行累加,且看代码:

运行结果:

观察运行结果可以发现 6000+4384 = 10384 = 2072+2084+2073+2083+2072,小伙伴们可以揣摩下原因。

可以通过jconsole连接service:jmx:rmi:///jndi/rmi://10.101.130.1:9999/jmxrmi或者service:jmx:rmi:///jndi/rmi://10.101.130.2:9999/jmxrmi来查看相应的数据值。如下图:

如何使用JMX监控Kafka

也可以通过命令行的形式来查看某项数据,不过这里要借助一个jar包:cmdline-jmxclient-0.10.3.jar,这个请自行下载,网上很多。

将这个jar放入某一目录,博主这里放在了linux系统下的/root/util目录中,以offset举例:

0.8.1.x版-读取topic=default_channel_kafka_zzh_demo,partition=0的Value值:

0.8.2.x版-读取topic=default_channel_kafka_zzh_demo,partition=0的Value值:

看出规律了嘛?如果还是没有,博主再提示一个小技巧,你可以用Jconsole打开相应的属性,然后将鼠标浮于其上,Jconsole会跳出tooltips来提示怎么拼这些属性的ObjectName.