现在我正在学习onmessage事件处理程序的简单/高级消费者示例,但是性能非常差(每分钟12万条消息,与之相比(使用我们的c++库,每分钟1百万条消息)
可能是等待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();
}
1条答案
按热度按时间kmbjn2e31#
默认情况下,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.consumer慢,因为这是eventconsumer在内部做的事情。注意:我目前正在改进rdkafka dotnetapi,同时也在研究性能——我知道更多信息后会在这里发布更多信息。