有没有办法在c#程序中远程从kafka服务器获取指标?

时间:2017-08-30 15:34:11

标签: c# apache-kafka jmx

我在c#中的当前项目需要从kafka服务器获取未复制分区的数量。我可以在mbeans部分的jconsole中查看这个,但我需要在c#程序中获取值。我尝试使用NetMX和这段代码进行初始连接。

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
INetMXConnector connector = NetMXConnectorFactory.Connect(new Uri("http://<myserver>:<jmxport>"), null);    
IMBeanServerConnection remoteServer = connector.MBeanServerConnection;

在第二行引发“未找到部分”错误,我想知道是否有人可以帮忙解决这个问题?

2 个答案:

答案 0 :(得分:0)

我认为NetMX不会连接到Java JMX端点。这是一个专门针对DotNet的“独立”实现。

最好的办法是将Jolokia java-agent加载到目标Kafka服务器中。 Jolokia通过HTTP / REST接口公开JMX,您可以通过C#访问它。

您可以尝试IKVM(CLR的java字节代码,它将为您提供可以调用的Java JMX兼容DLL.IKVM是一个将Java字节代码转换为.NET字节代码的编译器。标准JMX远程处理在C#客户端工作正常。

答案 1 :(得分:0)

在参考您的Jolokia配置时,您可能需要完全限定jar的路径。我看起来像这样并且有效:

readConfiguration

当我以非守护进程模式启动Kafka时,它会打印出来:

export JOLOKIA_HOME=/libs/java/jolokia/1.3.7
export JOLOKIA_JAR=$JOLOKIA_HOME/jolokia-jvm-1.3.7-agent.jar
export KAFKA_OPTS="-javaagent:$JOLOKIA_JAR=port=7778,host=* $KAFKA_OPTS"

然后我将浏览器指向http://localhost:7778/jolokia/search/ ,然后我得到:

I> No access restrictor found, access to any MBean is allowed
Jolokia: Agent started with URL http://10.8.36.121:7778/jolokia/