有没有办法在c程序中从kafka服务器远程获取度量?

vnzz0bqm  于 2021-06-07  发布在  Kafka
关注(0)|答案(3)|浏览(396)

我当前的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;

在第二行出现了一个“未找到节”错误,我想知道是否有人能帮上忙?

fkaflof6

fkaflof61#

1) 使用 jolokia 要转换的jar JMXHTTP 通过添加:
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库来使用以上端点。

ecfdbz9o

ecfdbz9o2#

我认为netmx不会连接到javajmx端点。它是专门为dotnet提供的“独立”实现。
最好的办法是将jolokiajava代理加载到目标kafka服务器中。jolokia通过http/rest接口公开jmx,您可以通过c#访问该接口。
您可以尝试ikvm(一个到clr的java字节码),它将为您提供一个与javajmx兼容的dll,您可以对其进行调用。ikvm是一个将java字节码转换为.net字节码的编译器。标准的jmx远程处理在c#客户机上运行良好。

nlejzf6q

nlejzf6q3#

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

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"

当我在非守护程序模式下启动Kafka时,它会打印以下内容:

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

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

{
  "request": {
    "mbean": "*:*",
    "type": "search"
  },
  "value": [
    "kafka.network:name=ResponseQueueTimeMs,request=ListGroups,type=RequestMetrics",
    "kafka.server:delayedOperation=topic,name=PurgatorySize,type=DelayedOperationPurgatory",
    "kafka.server:delayedOperation=Fetch,name=NumDelayedOperations,type=DelayedOperationPurgatory",
    "kafka.network:name=RemoteTimeMs,request=Heartbeat,type=RequestMetrics",
<-- SNIP -->
    "kafka.network:name=LocalTimeMs,request=Offsets,type=RequestMetrics"
  ],
  "timestamp": 1504188793,
  "status": 200
}

相关问题