在Kafka Brokers上启用JMX

时间:2016-04-19 04:09:00

标签: apache-kafka jmx

我通过添加

在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时间戳。我该如何解决这个问题,并打印出指标?

9 个答案:

答案 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)

如果在同一节点上运行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.

答案 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运行:

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

答案 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。

为可用的MBean使用jconsole

您应该首先使用jconsole来知道可用的MBean的名称。

您要查询度量标准的MBean的专有名称为kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec(在较早的版本中使用AllTopics前缀)。谢谢AndyTheEntity

jconsole

启用远程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,您应该使用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

使用以上命令,运行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"