How to enable remote JMX on Kafka brokers (for JmxTool)?

前端 未结 8 2165
孤独总比滥情好
孤独总比滥情好 2020-12-05 02:51

I enabled JMX on Kafka brokers by adding

KAFKA_JMX_OPTS=\"-Dcom.sun.management.jmxremote=true
                -Dcom.sun.management.jmxremote.authenticate=fa         


        
相关标签:
8条回答
  • 2020-12-05 03:11

    Edit bin/kafka-run-class.sh and set KAFKA_JMX_OPTS variable

    KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=your.kafka.broker.hostname -Djava.net.preferIPv4Stack=true"
    

    Update bin/kafka-server-start.sh add the below line

    export JMX_PORT=PORT
    
    0 讨论(0)
  • 2020-12-05 03:17

    If you're running via systemd:

    1. edit /etc/systemd/system/multi-user.target.wants/kafka.service
    2. in the "[service]" section add a line:
      • Environment=JMX_PORT=9989
    3. reload: systemctl daemon-reload
    4. restart: systemctl restart kafka
    5. enjoy the beans: echo 'beans' | java -jar jmxterm-1.0-alpha-4-uber.jar -l localhost:9989 -n 2>&1
    0 讨论(0)
  • 2020-12-05 03:21

    Use kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec

    The AllTopics prefix was used in older verions. You can specify topic using kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec,topic=<topic-name>

    src: http://grokbase.com/t/kafka/users/164ksnhff0/enable-jmx-on-kafka-brokers

    0 讨论(0)
  • 2020-12-05 03:25

    This is Kafka 2.3.0.

    Using jconsole For Available MBeans

    You should use jconsole first to know the names of the MBeans available.

    The proper name of the MBean you wanted to query metrics of is kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec (the AllTopics prefix was used in older verions). Thanks AndyTheEntity.

    Enabling Remote JMX (with no authentication or SSL)

    As described in Monitoring and Management Using JMX Technology you should set certain system properties when you start the Java VM of a Kafka broker.

    Kafka's bin/kafka-run-class.sh shell script makes the configuration painless as it does the basics for you and sets KAFKA_JMX_OPTS.

    # JMX settings
    if [ -z "$KAFKA_JMX_OPTS" ]; then
      KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false  -Dcom.sun.management.jmxremote.ssl=false "
    fi
    

    For remote JMX you should set com.sun.management.jmxremote.port that Kafka's bin/kafka-run-class.sh shell script sets using JMX_PORT environment variable.

    # JMX port to use
    if [  $JMX_PORT ]; then
      KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT "
    fi
    

    With that, enabling remote JMX is as simple as the following command:

    JMX_PORT=9999 ./bin/kafka-server-start.sh config/server.properties
    

    Using JmxTool

    With the above, run the JmxTool:

    $ ./bin/kafka-run-class.sh kafka.tools.JmxTool \
      --object-name 'kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec'
    Trying to connect to JMX url: service:jmx:rmi:///jndi/rmi://:9999/jmxrmi.
    "time","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:Count","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:EventType","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:FifteenMinuteRate","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:FiveMinuteRate","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:MeanRate","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:OneMinuteRate","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:RateUnit"
    1567586728595,0,messages,0.0,0.0,0.0,0.0,SECONDS
    1567586730597,0,messages,0.0,0.0,0.0,0.0,SECONDS
    ...
    

    You could use --one-time option to print the JMX metrics just once.

    $ ./bin/kafka-run-class.sh kafka.tools.JmxTool \
        --object-name 'kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec' \
        --one-time true
    Trying to connect to JMX url: service:jmx:rmi:///jndi/rmi://:9999/jmxrmi.
    "time","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:Count","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:EventType","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:FifteenMinuteRate","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:FiveMinuteRate","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:MeanRate","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:OneMinuteRate","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:RateUnit"
    1567586898459,0,messages,0.0,0.0,0.0,0.0,SECONDS
    
    0 讨论(0)
  • 2020-12-05 03:27

    You must set 'JMX_PORT' variable, or add the following line to bin/kafka-server-start.sh.

    export JMX_PORT=${JMX_PORT:-9999}
    

    then you will be able to connect to Kafka JMX metrics. I use jconsole tool and 'localhost:9999' address.

    0 讨论(0)
  • 2020-12-05 03:28

    Setting JMX_PORT inside bin/kafka-run-class.sh will clash with Zookeeper, if you are running Zookeeper on the same node. Best is to set JMX port individually inside corresponding server-start scripts:

    1. Insert line “export JMX_PORT=${JMX_PORT:-9998}” before last line in $KAFKA_HOME/bin/zookeeper-server-start.sh file.
    2. Restart the Zookeeper server.
    3. Repeat steps 1 and 2 for all zookeeper nodes in the cluster.
    4. Insert line “export JMX_PORT=${JMX_PORT:-9999}” before last line in $KAFKA_HOME/bin/kafka-server-start.sh file.
    5. Restart the Kafka Broker.
    6. Repeat steps 4 and 5 for all brokers in the cluster.
    0 讨论(0)
提交回复
热议问题