线上运行kafka集群,集群运行状态察看是非常必要的。kafka本身在该方面也做的比较到位,目前从源码级反应我们可以大致有两种方式。我下面一一细说。
kafka源码包中有kafka.tools.JmxTool.scala,部分代码如下:
object JmxTool {
def main(args: Array[String]) {
// Parse command line
val parser = new OptionParser
val objectNameOpt =
parser.accepts("object-name", "A JMX object name to use as a query. This can contain wild cards, and this option " +
"can be given multiple times to specify more than one query. If no objects are specified " +
"all objects will be queried.")
.withRequiredArg
.describedAs("name")
.ofType(classOf[String])
val reportingIntervalOpt = parser.accepts("reporting-interval", "Interval in MS with which to poll jmx stats.")
.withRequiredArg
.describedAs("ms")
.ofType(classOf[java.lang.Integer])
.defaultsTo(5000)
val helpOpt = parser.accepts("help", "Print usage information.")
val dateFormatOpt = parser.accepts("date-format", "The date format to use for formatting the time field. " +
"See java.text.SimpleDateFormat for options.")
.withRequiredArg
.describedAs("format")
.ofType(classOf[String])
.defaultsTo("yyyy-MM-dd HH:mm:ss.SSS")
val jmxServiceUrlOpt =
parser.accepts("jmx-url", "The url to connect to to poll JMX data. See Oracle javadoc for JMXServiceURL for details.")
.withRequiredArg
.describedAs("service-url")
.ofType(classOf[String])
.defaultsTo("service:jmx:rmi:///jndi/rmi://:9999/jmxrmi")
JmxTool.scala 的工作目的就是收集kafka集群中jvm暴露的bean信息并打印出来。具体的运行示例是:
./kafka-run-class.sh kafka.tools.JmxTool --jmx-url service:jmx:rmi:///jndi/rmi://:9999/jmxrmi
但是利用该种监控方式,你将看到满屏不知所云的消息,不明觉厉??
因此该种方式只是提供了一种解决方案而已,真正要做的是仿照JmxTool.scala代码写出自行监控的代码。
难道没有更好的方案了吗???当然不是。
下一篇我将具体讲到怎么通过Mx4jLoader得到kafka更好的监控方法。