所以我有一个运行ApacheKafka的EC2服务器(测试)。它的端口9111用于JMX,EC2安全设置更改为打开端口。
我正试图在我的Mac上运行JConsole来读取该服务器的JMX指标,但我收到了"安全连接失败"的消息,然后它询问我是否要尝试不使用SSL。所以我选择了不安全。然后我得到了"连接失败:重试?"错误。这次没有太多解释。出了什么问题?在Kafka的JXM配置中,安全连接和身份验证被禁用。
有什么线索/见解吗?
事实证明,当您在EC2中运行Java进程并且想要访问它的JMX时,您必须在运行Java进程时指定"-Djava.net.prpreferPv4Stack=true"。此外,我必须打开所有端口,这是因为RMI将使用不同的端口。所以我修复了RMI要使用的端口。
在我的例子中,设置-Djava.rmi.server.hostname有效。
问题是,当JVM创建远程调试JMX服务时,它还分配了一个动态RMI端口。您需要访问该端口和JMX_port,才能使用jConsole(或Kafka Manager等)进行连接。
你可以使用看到这一点
netstat -plunt
这里的一个选项是使用下面的启动参数强制JVM使用RMI的固定端口
-Dcom.sun.management.jmxremote.rmi.port=<some available port>
选项。然后你可以打开那个特定的端口。如果你选择码头化你的卡夫卡解决方案,这也很好。