Производитель Kafka не спешит с первым сообщением - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть тестовое приложение в .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.

1 Ответ

0 голосов
/ 12 декабря 2018

После еще нескольких копаний в логах запросов kafka я обнаружил, что перед отправкой первого сообщения производитель отправляет запросы API_VERSIONS и METADATA по всем темам.Через 1 секунду он снова отправляет запрос METADATA, на этот раз для конкретной темы, к которой производитель пытается отправить сообщение.

Установка для TopicMetadataRefreshIntervalMs значения менее 1 секунды уменьшает задержку первого сообщения.Как недостаток производитель начинает отправлять запросы метаданных чаще.Удивительно, что установка TopicMetadataRefreshIntervalMs на значение более секунды не увеличивает задержку.

Не уверен, является ли это ошибкой или функцией.

...