【问题标题】:Kafka producer is slow on first messageKafka生产者在第一条消息上很慢
【发布时间】: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


【解决方案1】:

在对 kafka 请求日志进行了更多挖掘之后,我发现在发送第一条消息之前,生产者会针对所有主题发送 API_VERSIONS 和 METADATA 请求。 1 秒后,它再次发送 METADATA 请求,这次是针对生产者尝试向其推送消息的特定主题。

将 TopicMetadataRefreshIntervalMs 设置为小于 1 秒可减少第一条消息延迟。作为不利的生产者开始更频繁地发送元数据请求。 令人惊讶的是,将 TopicMetadataRefreshIntervalMs 设置为超过一秒并不会延长延迟。

不确定这是错误还是功能。

【讨论】:

猜你喜欢
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-21
  • 2012-04-15
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多