我通过添加
在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'来获取指标时,它会输出不是预期行为的Unix时间戳。
sh /usr/local/kafka/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
上面的命令打印出Unix时间戳。我该如何解决这个问题,并打印出指标?
答案 0 :(得分:16)
编辑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
答案 1 :(得分:6)
您必须设置'JMX_PORT'变量,或将以下行添加到bin / kafka-server-start.sh。
export JMX_PORT=${JMX_PORT:-9999}
然后您就可以连接到Kafka JMX指标。我使用jconsole工具和'localhost:9999'地址。
答案 2 :(得分:3)
在JMX_PORT
内设置bin/kafka-run-class.sh
将与Zookeeper发生冲突。
最好是在相应的JMX
脚本中单独设置server-start
端口:
“export JMX_PORT=${JMX_PORT:-9998}”
文件的最后一行之前插入行$KAFKA_HOME/bin/zookeeper-server-start.sh
。“export JMX_PORT=${JMX_PORT:-9999}”
文件的最后一行之前插入行$KAFKA_HOME/bin/kafka-server-start.sh
。答案 3 :(得分: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
答案 4 :(得分:2)
如果您通过systemd运行:
systemctl daemon-reload
systemctl restart kafka
echo 'beans' | java -jar jmxterm-1.0-alpha-4-uber.jar -l localhost:9989 -n 2>&1
答案 5 :(得分: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
答案 6 :(得分:0)
这是Kafka 2.3.0。
您应该首先使用jconsole
来知道可用的MBean的名称。
您要查询度量标准的MBean的专有名称为kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec
(在较早的版本中使用AllTopics
前缀)。谢谢AndyTheEntity。
如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,您应该使用com.sun.management.jmxremote.port
环境变量来设置bin/kafka-run-class.sh
,这是Kafka的JMX_PORT
Shell脚本集。
# 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:
$ ./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
答案 7 :(得分: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或其他监视工具。
答案 8 :(得分: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"