1
2
3
4
5
6
7
8
9
|
/**
* If mx4j-tools is in the classpath call maybeLoad to load the HTTP interface of mx4j.
*
* The default port is 8082. To override that provide e.g. -Dmx4jport=8083
* The default listen address is 0.0.0.0. To override that provide -Dmx4jaddress=127.0.0.1
* This feature must be enabled with -Dmx4jenable=true
*
* This is a Scala port of org.apache.cassandra.utils.Mx4jTool written by Ran Tavory for CASSANDRA-1068
* */
|
它通过调用maybeLoad函数实现基于http的mx4j监控,改函数方法名特别有趣,看完源码后我们可以更清楚作者的风趣了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
try
{
debug(
"Will try to load MX4j now, if it's in the classpath"
);
val
mbs
=
ManagementFactory.getPlatformMBeanServer()
val
processorName
=
new
ObjectName(
"Server:name=XSLTProcessor"
)
val
httpAdaptorClass
=
Class.forName(
"mx4j.tools.adaptor.http.HttpAdaptor"
)
……
val
xsltProcessorClass
=
Class.forName(
"mx4j.tools.adaptor.http.XSLTProcessor"
)
……
info(
"mx4j successfuly loaded"
)
true
}
catch
{
case
e
:
ClassNotFoundException
=
> {
info(
"Will not load MX4J, mx4j-tools.jar is not in the classpath"
);
}
case
e
=
> {
warn(
"Could not start register mbean in JMX"
, e);
}
}
|
因为kafka源码包中并不提供mx4j-tools.jar,因此上述代码实际不能实现监控,你懂了maybeLoad的具体意义了吧??而且感觉开发者应该也有过相关jar包
Mx4jLoader在KafkaServer.scala中调用,因此每开启一个kafka broker实际上也对应开启了一个监控模块,由于没有对应的jar包,实际运行broker时就会出现:
对应具体的classpath是什么?具体分析日志,运行broker时会出现以下日志:
上面显示了运行broker时会加载kafka中/core/lib_managed/scala_2.8.0/compile下的所有jar包,好,我们把对应的jar扔到该目录下吧。
mx4j-tool.jar可以在网站http://mvnrepository.com/ 上找到,具体使用3.0.1版本的jar包,也许你要问为什么:因为坑爹的1.1版本中根本没有诸如mx4j.tools.adaptor.http.HttpAdaptor等class。
将对应jar放到classpath下后,重新运行broker,日志如下:
出现以上日志就表明你终于走到最后一步了,下面就是开启浏览器(具体输入ip:8082,如果你没有改kafka任何配置或源码,请一定记得端口是8082),happy你的成果吧,以下为最终监控界面结果:
感谢公司张大神的帮助,最后要说的是,记得参与kafka 官方论坛,浏览相关maillist。还有,如果你还不能翻墙,那建议你还是先学会翻墙吧。