设置不受保护的JMX

在此选项中,您将在不使用任何认证的情况下在 Kafka 上激活 JMX。

要点: 您可以在 com.sun.management.jmxremote.port 选项中指定的端口连接至服务器的 JMX 接口,而不必提供任何类型的凭证。但是,建议不要对生产环境使用此选项,不过此选项对于在测试环境或本地环境中使用 JMX 很有用。

Linux:

# for JMX monitoring
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote=true"
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=1099"
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.rmi.port=1099"
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.ssl=false"
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Djava.rmi.server.hostname=192.168.1.106"

Microsoft Windows:

set KAFKA_JMX_OPTS=%KAFKA_JMX_OPTS% -Dcom.sun.management.jmxremote=true
set KAFKA_JMX_OPTS=%KAFKA_JMX_OPTS% -Dcom.sun.management.jmxremote.port=1099
set KAFKA_JMX_OPTS=%KAFKA_JMX_OPTS% -Dcom.sun.management.jmxremote.rmi.port=1099
set KAFKA_JMX_OPTS=%KAFKA_JMX_OPTS% -Dcom.sun.management.jmxremote.ssl=false
set KAFKA_JMX_OPTS=%KAFKA_JMX_OPTS% -Dcom.sun.management.jmxremote.authenticate=false
set KAFKA_JMX_OPTS=%KAFKA_JMX_OPTS% -Djava.rmi.server.hostname=192.168.1.106

如果您使用IDEA运行的Kafka客户端程序(例如收集Kafka Stream指标),也可以这样配置:

其中具有焦点的输入框内容如下:

-Dcom.sun.management.jmxremote.port=1099
-Dcom.sun.management.jmxremote.rmi.port=1099
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote=true
-Djava.rmi.server.hostname=192.168.1.106

最后就可以使用Kafka Assistant收集Kafka指标了:

或者您也可以使用 JConsole 进行连接,请转至 JAVA_HOME/jdk/bin 目录并启动 JConsole。 在远程过程字段中,输入 192.168.1.106:1099,然后单击连接。其中192.168.1.106是我本地的IP地址,换成你的。

设置 JMX 以进行客户机认证

在此选项中,您将在不使用 SSL 的情况下根据用户标识和密码在 Kafka 上激活 JMX 以进行客户机认证。

控制该认证的属性为 com.sun.management.jmxremote.authenticate,必须将其设置为 true。该认证由下列两个其他属性和配置文件进行管理:

可使用名为 jmxremote.accessjmxremote.password 的两个样本文件作为用户角色和密码。

要点: 因为 jmxremote.password 文件中存储了明文密码,所以此文件必须设置为只读,否则程序将关闭并显示错误。

对于Windows系统,可以使用以下命令设置文件为当前用户只读(其中chenjing是我的Windows用户名):

cacls jmxremote.password /P chenjing:R

对于Linux系统,可以使用以下命令设置文件为只读

sudo chmod 444 jmxremote.password

jmxremote.access 文件的内容如下:

monitorRoleUser   readonly
controlRoleUser   readwrite \
                  create javax.management.monitor.*,javax.management.timer.* \
                  unregister

jmxremote.password 文件的内容如下:

monitorRoleUser  1234
controlRoleUser  1234

设置VM选项:

Linux:

# for JMX monitoring
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote=true"
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=1099"
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.rmi.port=1099"
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.ssl=false"
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.authenticate=true"
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Djava.rmi.server.hostname=192.168.1.106"
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.access.file=Path_to_access_file/jmxremote.access"
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.password.file=Path_to_password_file/jmxremote.password"

Microsoft Windows:

set KAFKA_JMX_OPTS=%KAFKA_JMX_OPTS% -Dcom.sun.management.jmxremote=true
set KAFKA_JMX_OPTS=%KAFKA_JMX_OPTS% -Dcom.sun.management.jmxremote.port=1099
set KAFKA_JMX_OPTS=%KAFKA_JMX_OPTS% -Dcom.sun.management.jmxremote.rmi.port=1099
set KAFKA_JMX_OPTS=%KAFKA_JMX_OPTS% -Dcom.sun.management.jmxremote.ssl=false
set KAFKA_JMX_OPTS=%KAFKA_JMX_OPTS% -Dcom.sun.management.jmxremote.authenticate=true
set KAFKA_JMX_OPTS=%KAFKA_JMX_OPTS% -Djava.rmi.server.hostname=192.168.1.106
set KAFKA_JMX_OPTS=%KAFKA_JMX_OPTS% -Dcom.sun.management.jmxremote.access.file=Path_to_access_file\jmxremote.access
set KAFKA_JMX_OPTS=%KAFKA_JMX_OPTS% -Dcom.sun.management.jmxremote.password.file=Path_to_password_file\jmxremote.password

如果您使用IDEA运行的Kafka客户端程序(例如收集Kafka Stream指标),也可以这样配置:

其中具有焦点的输入框内容如下:

-Dcom.sun.management.jmxremote.port=1099
-Dcom.sun.management.jmxremote.rmi.port=1099
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote=true
-Djava.rmi.server.hostname=192.168.1.106
-Dcom.sun.management.jmxremote.access.file=Path_to_access_file\jmxremote.access
-Dcom.sun.management.jmxremote.password.file=Path_to_password_file\jmxremote.password

最后就可以使用Kafka Assistant收集Kafka指标了: