rdkafka dotnet库缓慢的消费者表现

时间:2016-11-14 22:43:34

标签: c# apache-kafka confluent-kafka

现在我正在关注OnMessage事件处理程序的Simple / Advanced Consumer示例,并且性能非常差。 (每分钟120k消息vs(使用我们的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();
}

2 个答案:

答案 0 :(得分:0)

你能发贴你的代码吗?另外,免责声明:

如果写得好,C ++通常比C#/ .net快。但是,C#/ .net具有C ++没有的优点。我同意,这很奇怪,但不要期望用C#编写的代码发送1M消息。

答案 1 :(得分: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并调查性能 - 当我了解更多内容时,我会在此处发布更多内容。