2017-08-30 90 views
0

我在C#中當前的項目需要從卡夫卡服務器獲取下複製分區的數量。我可以在mbeans部分的jconsole中查看它,但我需要在c#程序中獲取值。我嘗試使用NetMX與此代碼進行初始連接。有沒有一種方式來獲得在C#程序中的卡夫卡遠程服務器的指標?

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

「未找到部分」錯誤是在第二行拋出,我想知道如果有人能幫助這一點嗎?

+0

這不是在.NET中,但我用椒一些基本的監控和它工作正常。 沒試過INetMXConnector,但看着github上的代碼,你的錯誤出現,你需要一個app.config,它的工作 - 看樣品這裏 https://github.com/SzymonPobiega/NetMX/tree/master/Samples/JmxClientDemo https://github.com/SzymonPobiega/NetMX/blob/master/NetMX.Default/MBeanServer.cs#L36 – Treziac

回答

0

我不認爲NetMX將連接到Java JMX端點。這是專門針對DotNet的「獨立」實現。

最好的辦法是到Jolokia Java的代理加載到你的目標卡夫卡服務器。 Jolokia通過可以通過C#訪問的HTTP/REST接口公開JMX。

你可以嘗試IKVM(一個java字節碼給CLR,它將爲你提供一個Java JMX兼容的DLL,你可以調用它,IKVM是一個將Java字節碼轉換成.NET字節碼的編譯器。從

+0

嘿,所以我把Jolokia war代理安裝到了tomcat的webapp文件夾中。但是,當我提出獲取kafka指標的請求時,它會給出錯誤。此外,我用列表請求,並且也沒有顯示關於卡夫卡任何東西,但它確實表明了標準的Java類的東西「的java.lang」。但是,當我在我的計算機上使用jconsole連接到服務器上的jmx端口時,我可以看到所有kafka指標。你以前遇到過嗎? – Rish

+0

我會使用jolokia java代理而不是戰爭。 – Nicholas

+0

我嘗試運行此文件中所述:java -javaagent:jolokia-jvm-1.3.7-agent.jar = port = 7777,host = localhost 我得到這個異常:線程「main」java.lang中的異常。 reflect.InvocationTargetException 引起:java.lang.NumberFormatException:對於輸入字符串:「7777 host = localhost」 本機方法中的致命錯誤:處理-javaagent失敗。我遺漏了大部分堆棧跟蹤。 – Rish

0

關於你椒配置的C#的客戶,也許你需要完全限定在壇路礦看起來像這樣和作品:

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" 

當我在非守護啓動卡夫卡模式,它打印此:

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 
} 
+0

謝謝。我實際上是在Windows服務器上運行kafka。因此,我爲「KAKFA_OPS」設置了一個環境變量並重新啓動了kafka,但仍然無法工作。我需要有其他東西來運行代理jar嗎?僅供參考我已安裝JRE – Rish

相關問題