如何在Kafka代理上启用远程JMX(适用于JmxTool)?

问题描述 投票:0回答:11

我通过添加

在 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
11个回答
25
投票

编辑 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

10
投票

如果您通过 systemd 运行:

  1. 编辑/etc/systemd/system/multi-user.target.wants/kafka.service
  2. 在“[service]”部分添加一行:
    • 环境=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>&1

9
投票

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

export JMX_PORT=${JMX_PORT:-9999}

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


9
投票
如果您在同一节点上运行 Zookeeper,则在

JMX_PORT

 内设置 
bin/kafka-run-class.sh
 将与 Zookeeper 发生冲突。
最好是在相应的 
JMX
 脚本中单独设置 
server-start
 端口:

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

4
投票
这是 Kafka 2.3.0。

使用 jconsole 获取可用的 MBeans

您应该首先使用

jconsole

 来了解可用 MBean 的名称。

您想要查询其指标的 MBean 的正确名称是

kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec

(旧版本中使用 
AllTopics
 前缀)。谢谢
AndyTheEntity

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

使用 JMX 技术进行监控和管理中所述,您应该在启动 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,您应该使用

com.sun.management.jmxremote.port

 环境变量设置 Kafka 的 
bin/kafka-run-class.sh
 shell 脚本设置的 
JMX_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
    

2
投票
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
    

1
投票
这是标准的 Kafka 启动程序:

bin/kafka-server-start.sh config/server.properties
这是使用 

JMX 的 Kafka 启动过程:

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

0
投票
使用

kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec



旧版本中使用了

AllTopics

 前缀。您可以使用 
kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec,topic=<topic-name>
 指定主题

src:

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


0
投票
Kafka已经提供了你所需要的一切。当您启动服务器时,使用以下命令激活 KAFKA_JMX_OPTS arg:

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



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


0
投票
在调用 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"
    

0
投票
我只是想分享一下我与JMX_PORT相关的经验

我使用的是Windows操作系统。我在 in\windows\kafka-run-class.bat 下配置 JMX_PORT。

由于我在同一节点上使用zookeeper和kafka服务器,所以我先启动zookeeper(成功启动)。然后我启动kafka服务器(启动失败)。它失败的原因是因为运行zookeeper和kafka服务器的脚本引用了设置JMX_PORT(kafka-run-class.bat)的相同脚本。

我所做的是修改

kafka-run-class.bat 通过添加参数检查来决定zookeeper和kafka服务器启动脚本使用的JMX_PORT。

IF %1 == kafka.Kafka ( rem using port 8005 for the Kafka server set JMX_PORT=8005 ) IF %1 == org.apache.zookeeper.server.quorum.QuorumPeerMain ( rem using port 8004 for the ZooKeeper set JMX_PORT=8004 )
    
© www.soinside.com 2019 - 2024. All rights reserved.