【问题标题】:How to enable remote JMX on Kafka brokers (for JmxTool)?如何在 Kafka 代理上启用远程 JMX(用于 JmxTool)?
【发布时间】:2016-08-11 00:59:26
【问题描述】:

我通过添加在 Kafka 代理上启用了 JMX

KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote=true
                -Dcom.sun.management.jmxremote.authenticate=false
                -Dcom.sun.management.jmxremote.ssl=false
                -Djava.rmi.server.hostname=<server_IP>
                -Djava.net.preferIPv4Stack=true"

但是,当我使用 kafka.tools.JmxTool 获取 JMX 指标时,它仅输出 Unix 时间戳。为什么?

./bin/kafka-run-class.sh kafka.tools.JmxTool \
  --object-name 'kafka.server:type=BrokerTopicMetrics,name=AllTopicsMessagesInPerSec' \
  --jmx-url "service:jmx:rmi:///jndi/rmi://<server_IP>:9111/jmxrmi"

如何让它打印出指标?

【问题讨论】:

    标签: apache-kafka jmx


    【解决方案1】:

    编辑 bin/kafka-run-class.sh 并设置 KAFKA_JMX_OPTS 变量

    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"
    

    更新 bin/kafka-server-start.sh 添加以下行

    export JMX_PORT=PORT
    

    【讨论】:

    • 只有 export JMX_PORT=PORT 在 Kafka 服务启动之前足以在我的 Mac 上启用 JMX。我用 jconsole 对此进行了测试。如果你想连接生产者和消费者,请在每个开始之前设置/导出不同的 jmx 端口。
    • 是否需要重启kafka?
    • @DivyanshuJimmy yeap :)
    • 您可以在脚本之外导出。不要修改它
    【解决方案2】:

    您必须设置“JMX_PORT”变量,或将以下行添加到 bin/kafka-server-start.sh。

    export JMX_PORT=${JMX_PORT:-9999}
    

    然后您将能够连接到 Kafka JMX 指标。我使用 jconsole 工具和 'localhost:9999' 地址。

    【讨论】:

      【解决方案3】:

      如果您在同一节点上运行 Zookeeper,在 bin/kafka-run-class.sh 内设置 JMX_PORT 将与 Zookeeper 冲突。 最好是在相应的server-start 脚本中单独设置JMX 端口:

      1. $KAFKA_HOME/bin/zookeeper-server-start.sh 文件的最后一行之前插入行 “export JMX_PORT=${JMX_PORT:-9998}”
      2. 重启 Zookeeper 服务器。
      3. 对集群中的所有 zookeeper 节点重复步骤 1 和 2。
      4. $KAFKA_HOME/bin/kafka-server-start.sh 文件的最后一行之前插入行 “export JMX_PORT=${JMX_PORT:-9999}”
      5. 重新启动 Kafka 代理。
      6. 对集群中的所有代理重复第 4 步和第 5 步。

      【讨论】:

      • 这个答案非常适合我的问题。我将 kafka_2.11-2.0.0 和 zookeeper-3.4.12 一起用作 3 节点集群。该解决方案适用于 Kafka-Manager 的基于 JMX 的指标显示图表以及 kafka-topics.sh --list --zookeeper & Kafka Console Producer (kafka-console-producer.sh --broker-list) & Console Consumer (kafka-控制台-consumer.sh --bootstrap-server) & kafka-topics.sh --describe。 Zookeeper 和 Kafka 都在不同的 JMX 端口上工作。 Zookeeper 在 9998 端口工作,Kafka 和 Kafka-Manager 在 9999 端口工作。谢谢@Rahul Singhai
      • 每个 Kafka Broker 都使用相同的 JMX 端口?
      • 不,如果在同一个节点上运行多个 Kafka Broker 或 ZK,那么您需要为每个节点指定不同的 JMX 端口。
      • 我建议不要修改 shell 脚本,因为这些脚本不应该在服务器升级时保留
      【解决方案4】:

      如果你通过 systemd 运行:

      1. 编辑/etc/systemd/system/multi-user.target.wants/kafka.service
      2. 在“[服务]”部分添加一行:
        • 环境=JMX_PORT=9989
      3. 重新加载:systemctl daemon-reload
      4. 重启:systemctl restart kafka
      5. 享受豆类:echo 'beans' | java -jar jmxterm-1.0-alpha-4-uber.jar -l localhost:9989 -n 2&gt;&amp;1

      【讨论】:

        【解决方案5】:

        这是 Kafka 2.3.0。

        对可用的 MBean 使用 jconsole

        您应该首先使用jconsole 来了解可用MBean 的名称。

        您要查询其指标的 MBean 的正确名称是 kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec(在旧版本中使用了 AllTopics 前缀)。谢谢AndyTheEntity

        启用远程 JMX(无需身份验证或 SSL)

        Monitoring and Management Using JMX Technology 中所述,您应该在启动 Kafka 代理的 Java VM 时设置某些系统属性。

        Kafka 的bin/kafka-run-class.sh shell 脚本使配置变得轻松,因为它为您完成了基本操作并设置了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
        

        对于远程 JMX,您应该使用 JMX_PORT 环境变量设置 Kafka 的 bin/kafka-run-class.sh shell 脚本设置的 com.sun.management.jmxremote.port

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

        这样,启用远程 JMX 就像以下命令一样简单:

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

        使用 JmxTool

        通过以上,运行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
        ...
        

        您可以使用 --one-time 选项仅打印一次 JMX 指标。

        $ ./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
        

        【讨论】:

          【解决方案6】:
          vim kafka_2.11-0.10.1.1/bin/kafka-run-class.sh
          

          然后添加前两行并像我对其他行所做的那样添加注释,(注意:这样做之后,Kafka 脚本不能用于列出主题的客户端操作。对于您的客户端操作,您需要使用单独的脚本,在不同的位置重新下载并使用)

          export JMX_PORT=9096
          KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=<ipaddress> -Dcom.sun.management.jmxremote.port=$JMX_PORT -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT"
          
          
          
          # 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
          
          # JMX port to use
          #if [  $JMX_PORT ]; then
          #  KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT "
          #fi
          

          【讨论】:

          • 正确的想法,错误的实现。没错,您可能需要设置其他 JMX JVM 参数,但您应该在调用脚本之前设置这些变量,不要修改脚本本身。您正在为维护头痛做好准备。
          【解决方案7】:

          使用kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec

          AllTopics 前缀用于旧版本。您可以使用kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec,topic=&lt;topic-name&gt;指定主题

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

          【讨论】:

            【解决方案8】:

            Kafka 提供了您所需要的一切。启动服务器时,使用以下命令激活 KAFKA_JMX_OPTS 参数:

            $KAFKA_JMX_OPTS JMX_PORT=[your_port_number] ./kafka-server-start.sh -daemon ../config/server.properties

            使用这些命令,您激活了 JMX Remote 和相关端口。然后您可以连接您的 JConsole 或其他监控工具。

            【讨论】:

              【解决方案9】:

              在调用 kafka-server-start.sh 之前添加以下导出。它对我的案子来说就像一个魅力。您可以为 JMX_PORT 设置所需的端口,您应该为 $BROKER_IP 部分设置代理。

                 export JMX_PORT=9900
                 export KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=$BROKER_IP -Djava.net.preferIPv4Stack=true"
              

              【讨论】:

                【解决方案10】:

                这是标准的 Kafka 启动程序:

                bin/kafka-server-start.sh config/server.properties
                

                这是带有 JMX 的 Kafka 启动过程:

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-03-21
                  • 2013-05-06
                  • 1970-01-01
                  • 2020-06-19
                  • 2015-10-21
                  • 1970-01-01
                  • 2016-05-03
                  相关资源
                  最近更新 更多