现在我正在关注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();
}
答案 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并调查性能 - 当我了解更多内容时,我会在此处发布更多内容。