kafka启动时默认是不启用远程JMX的。根据官方文档需要通过设置JMX_PORT环境变量在启动kafka时激活JMX。
see Apache Kafka Monitoring
Apache Kafka disables remote JMX by default. You can enable remote monitoring using JMX by setting the environment variable JMX_PORT for processes started using the CLI or standard Java system properties to enable remote JMX programmatically
正确设置JMX_PORT的姿势(以19797
端口为例,所有命令在同一行
,第一个,请注意!):
$ JMX_PORT=19797 $KAFKA_HOME/bin/kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties
以下方式是不起
作用的(分别设置JMX_PORT和启动kafka),也就是说JMX_PORT的设置不会被传递到子shell中,原因请参看:linux - export not working in my shell script - Stack Overflow,上面链接里提到的解决方案(使用. or source 来调用kafka-server-start.sh的方法)无法在kafka启动脚本里使用,因为一行kafka脚本base_dir=\$(dirname $0)
会因为$0值的改变而报错,导致脚本运行失败。
$export JMX_PORT=19797
$KAFKA_HOME/bin/kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties
如果遇到还是连接不上kakfa JMX的情况,请尝试找到$KAFKA_HOME/bin/kakfa-run-class.sh文件,打开并找到:
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
替换为:
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 -Djava.rmi.server.hostname=<机器的ip>
fi
<机器的ip>后一定要有一个空格!!