0

现在我正在关注 OnMessage 事件处理程序的简单/高级消费者示例,性能很差。(每分钟 120k 条消息与(使用我们的 C++ 库每分钟 1M 条消息)

通过等待 OnMessage 事件而不是实现繁忙的循环并使用 .Consume(TimeSpan) 来消耗消息可能是延迟?

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 回答