我当前的c项目需要从kafka服务器获取复制不足的分区数。我可以在jconsole的mbeans部分下查看这个,但是我需要在c程序中获取值。我尝试使用netmx与此代码建立初始连接。
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
INetMXConnector connector = NetMXConnectorFactory.Connect(new Uri("http://<myserver>:<jmxport>"), null);
IMBeanServerConnection remoteServer = connector.MBeanServerConnection;
在第二行出现了一个“未找到节”错误,我想知道是否有人能帮上忙?
3条答案
按热度按时间fkaflof61#
1) 使用
jolokia
要转换的jarJMX
至HTTP
通过添加:kafka选项:javaagent:/usr/share/java/kafka/jolokia-jvm-1.6.0-agent.jar-dcom.sun.management.jmxremote-dcom.sun.management.jmxremote.authenticate=false-dcom.sun.management.jmxremote.ssl=false-djava.rmi.server.hostname=localhost-dcom.sun.management.jmxremote.port=9999-djava.security.auth.login.config=/var/private/sasl\u acl/kafka.server.jaas.config。
2) 您将得到一个http端点,现在您可以尝试一个示例get请求来检查它是否工作http://localhost:8778/jolokia/read//java。lang:type=memory/heapmemoryusage
3) 使用标准restapi库来使用以上端点。
ecfdbz9o2#
我认为netmx不会连接到javajmx端点。它是专门为dotnet提供的“独立”实现。
最好的办法是将jolokiajava代理加载到目标kafka服务器中。jolokia通过http/rest接口公开jmx,您可以通过c#访问该接口。
您可以尝试ikvm(一个到clr的java字节码),它将为您提供一个与javajmx兼容的dll,您可以对其进行调用。ikvm是一个将java字节码转换为.net字节码的编译器。标准的jmx远程处理在c#客户机上运行良好。
nlejzf6q3#
参考jolokia配置,可能需要完全限定jar的路径。我的看起来像这样,而且有效:
当我在非守护程序模式下启动Kafka时,它会打印以下内容:
然后我把浏览器指向http://localhost:7778/jolokia/search/:我得到: