【发布时间】:2019-05-12 16:28:44
【问题描述】:
我在 .NET 中有一个测试应用程序,它创建 kafka 生产者并使用 Confluent 客户端库向主题发送一些消息。
由于某种原因,第一条消息的确认总是迟到 1 秒,后续消息的确认几乎立即到达。
这是正常行为还是我缺少某些配置?
- 我想我尝试调整所有生产者配置,除了设置 EnableDeliveryReports = false 没有任何帮助。
- 主题未分区,在发送第一条消息时已存在。
-
如果我更新应用程序以向几个主题发送消息,那么每个主题的第一条消息都会延迟 1 秒发送。
static void Main() { var producer = new Producer<Null, string>(new ProducerConfig { BootstrapServers = "localhost:9092", LingerMs = 100, BatchNumMessages = 1, }); for (var i = 0; i < 10; i++) { var start = DateTime.Now; producer.ProduceAsync( new TopicPartition("test-topic", Partition.Any), new Message<Null, string> { Value = $"hello kafka! #{i}" }).Wait(2000); var now = DateTime.Now; Console.WriteLine($"{now:HH:mm:ss.fff} Message sent in {(now - start).TotalMilliseconds:N1}."); } producer.Dispose(); Console.ReadLine(); }
样本输出:
18:06:13.605 Message sent in 1,007.0.
18:06:13.607 Message sent in 1.0.
18:06:13.608 Message sent in 1.0.
18:06:13.609 Message sent in 1.0.
18:06:13.610 Message sent in 1.0.
18:06:13.611 Message sent in 1.0.
18:06:13.612 Message sent in 1.0.
18:06:13.613 Message sent in 1.0.
18:06:13.614 Message sent in 1.0.
18:06:13.615 Message sent in 1.0.
【问题讨论】:
-
我猜这只是一个冷启动问题... librdkafka 需要在后台创建一个批处理队列。如果您发送的数量超过批量大小并继续循环,当批量刷新并发送到代理时,您会看到周期性的时间延迟
-
试图通过更多次迭代运行相同的示例,但只有第一条消息有这么长的延迟,其余的都在几毫秒内得到确认。
标签: .net apache-kafka confluent-platform