線上運行kafka集羣,集羣運行狀態察看是很是必要的。kafka自己在該方面也作的比較到位,目前從源碼級反應咱們能夠大體有兩種方式。我下面一一細說。
kafka源碼包中有kafka.tools.JmxTool.scala,部分代碼以下:
java
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信息並打印出來。具體的運行示例是:
shell
./kafka-run-class.sh kafka.tools.JmxTool --jmx-url service:jmx:rmi:///jndi/rmi://:9999/jmxrmi
可是利用該種監控方式,你將看到滿屏不知所云的消息,不明覺厲??
所以該種方式只是提供了一種解決方案而已,真正要作的是仿照JmxTool.scala代碼寫出自行監控的代碼。 jvm
難道沒有更好的方案了嗎???固然不是。 ui
下一篇我將具體講到怎麼經過Mx4jLoader獲得kafka更好的監控方法。 this