2016-11-14 18 views
0

現在我正在關注OnMessage事件處理程序的簡單/高級消費者示例,並且性能很差。 (使用我們的C++庫)每分鐘120K消息VS(每分鐘1M消息rdkafka dotnet庫消費性能慢

可以是通過等待的onMessage事件,而不是實施繁忙的循環和使用.Consume(時間跨度)消耗所述消息延遲時間?

var config = new Config() { GroupId = "example-csharp-consumer" }; 
using (var consumer = new EventConsumer(config, "127.0.0.1:9092")) 
{ 
    consumer.OnMessage += (obj, msg) => 
    { 
     string text = Encoding.UTF8.GetString(msg.Payload, 0, msg.Payload.Length); 
     Console.WriteLine($"Topic: {msg.Topic} Partition: {msg.Partition} Offset: {msg.Offset} {text}"); 
    }; 

    consumer.Subscribe(new []{"testtopic"}); 
    consumer.Start(); 

    Console.WriteLine("Started consumer, press enter to stop consuming"); 
    Console.ReadLine(); 
} 
+0

什麼是您的平均郵件大小?什麼是消費者CPU使用率?代理(s)CPU使用率是多少? – Edenhill

回答

0

你能發佈您的代碼,請另外,免責聲明:。。。

C++一般快於C#/ IF淨寫得不錯然而,C#/。NET有C++不優點我同意,這很奇怪,但不要期望用C#編寫的代碼生成1M條消息。

+0

我不期待C++的性能,我的代碼非常接近rdkafka-dotnet示例顯示的內容。 –

0

默認情況下,librdkafka(rdkafka-dotnet構建於其上)針對高吞吐量進行了調整。如果您想要低延遲:「將queue.buffering.max.ms設置爲1將確保消息儘快發送。」 (來自:https://github.com/edenhill/librdkafka/blob/master/INTRODUCTION.md

現在我重新讀你的問題,我看你可能在吞吐量之後。也許嘗試調整列出的一些設置:https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md

使用EventConsumer/OnMessage不應該比在循環中調用Consumer.Consume慢,因爲這是EventConsumer在內部執行的操作。 注意:我目前正致力於改進rdkafka-dotnet API並研究性能 - 當我知道更多內容時,我會在此處發佈更多內容。