The Kafka JmxTool works fine although it is not user friendly, in that you 
cannot perform a query of the Kafka Server mbeans to determine content and to 
determine the path-string that you need to place into the -object-name option.

Here's how I solved the problem...

First, make sure that Kafka is running with jms options enabled...

-          The following opens up the jxm port with no authentication (for 
testing)...
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false

Second, get jstatd running on the same server so that you can use VisualVM to 
look into what is going on inside.

Then, use VisualVM along with its jmx-plugin to view the mbeans and contents.

When using VisualVM, you will first connect to jstatd, then you have to right 
click on the host to request a JMX connection, where you will get a dialog, 
where you have to add the jmx port number to the host name (after the colon).

When you view the mbeans, you will see the path to the given attribute if you 
hover over it with the mouse pointer, but only for a moment... The string can 
be quite long and... Unfortunately, you don't have the option to capture that 
string into the cut-buffer via the interface. I used a screen capture utility 
to capture the string and typed it into the terminal.

So here is what my first working query looked like...

/opt/kafka/kafka/bin/kafka-run-class.sh kafka.tools.JmxTool --object-name 
"kafka.consumer:type=FetchRequestAndResponseMetrics,name=FetchRequestRateAndTimeMs,clientId=ReplicaFetcherThread-0-5,brokerHost=hostname05.cluster.com,brokerPort=9092"
 --jmx-url service:jmx:rmi:///jndi/rmi://`hostname`:9999/jmxrmi

That command will output all of the attributes for the given object-name, and 
it's a long object-name.
With some experimentation, I found that you can use wild-cards on portions of 
the object-name that were clearly dynamic, such as the host-name or the 
thread-name. So you can get the attribute for all similar objects by using the 
following query...

/opt/kafka/kafka/bin/kafka-run-class.sh kafka.tools.JmxTool --object-name 
"kafka.consumer:type=FetchRequestAndResponseMetrics,name=FetchRequestRateAndTimeMs,clientId=ReplicaFetcherThread*,brokerHost=hostname*.cluster.com,brokerPort=*"
 --jmx-url service:jmx:rmi:///jndi/rmi://`hostname`:9999/jmxrmi

There may be simpler tools to use, but I really do like the GUI goodness in 
VisualVM, (and it is free).

I hope that helps.



Reply via email to