0

現在、OnMessage イベント ハンドラーの Simple/Advanced Consumer の例に従っていますが、パフォーマンスはかなり貧弱です。(1 分あたり 120,000 メッセージ vs (C++ ライブラリを使用すると 1 分あたり 100 万メッセージ)

ビジー ループを実装して .Consume(TimeSpan) を使用するのではなく、OnMessage イベントを待機することで、メッセージを消費する際の遅延が発生する可能性がありますか?

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();
}
4

1 に答える 1

1

デフォルトでは、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 の改善とパフォーマンスの調査に取り組んでいます。詳細がわかり次第、ここに投稿します。

于 2016-12-08T02:56:26.043 に答える