Параметры производителя kafka требуют, чтобы одно сообщение вступило в силу

Я использую confluent-kafka-python (https://github.com/confluentinc/confluent-kafka-python) для отправки сообщений в Kafka с помощью Python. Я отправляю сообщения нечасто, поэтому хочу, чтобы задержка была очень низкой.

Если я сделаю это, я могу получить сообщения, которые появятся у моего потребителя с задержкой примерно в 2 мс:

conf = { "bootstrap.servers" : "kafka-test-10-01",
         "queue.buffering.max.ms" : 0, 
         'batch.num.messages': 1, 
          'queue.buffering.max.messages': 100, 
              "default.topic.config" : {"acks" : 0 }}
p = confluent_kafka.Producer(**conf)
p.produce(...)

НО: задержка снижается почти до нуля только после того, как я отправил первое сообщение этому новому производителю. Последующие сообщения имеют задержку около 2 мсек.

Первое сообщение имеет задержку около 1 секунды. Почему?


person davidbaraff    schedule 20.01.2017    source источник
comment
Тема уже существует до того, как вы ее опубликуете? Если нет, то дополнительное время может быть временем, необходимым для автоматического создания темы в брокере до публикации первого сообщения.   -  person Hans Jespersen    schedule 21.01.2017


Ответы (1)


Магнус Эденхилл, автор librdkafka, задокументировал некоторые полезные параметры, которые нужно установить для уменьшения задержки в любом клиенте librdkafka:

https://github.com/edenhill/librdkafka/wiki/How-to-decrease-message-latency

Вы не показываете свои параметры потребителя, но из вашего описания это звучит так, как будто потребитель опрашивает и правильно ничего не получает (нулевые сообщения) до публикации первого сообщения, и поэтому он затем ждет интервал по умолчанию 500 мс fetch.error.backoff.ms перед повторной попыткой опроса и получение первого сообщения. После этого сообщения, вероятно, будут приходить достаточно быстро, чтобы ошибка не сработала. Возможно, попробуйте установить fetch.error.backoff.ms ниже и посмотреть, поможет ли это.

person Hans Jespersen    schedule 21.01.2017
comment
В потребителе нет интересных настроек. Я не думаю, что ваш ответ правильный, потому что, если я запускаю потребителя и оставляю его работающим, это всегда зависит от производителя относительно того, есть ли задержка. - person davidbaraff; 23.01.2017
comment
Я создал продюсера и попросил его отправить сообщение. Затем я создал нового потребителя с auto.offset.reset = 'latest'. Начат опрос потребителей. Первое сообщение имеет короткую задержку 3 мс. Итак, проблема явно на стороне производителя, первое сообщение всегда задерживается. Есть другие идеи? Учтите, что это не критично, просто любопытно. - person davidbaraff; 23.01.2017
comment
Наконец, сообщения отправляются очень медленно, потому что я отправляю их вручную из интерпретатора Python (сторона производителя). потребитель просто опрашивает. config для потребителя: conf = {bootstrap.servers: server, group.id: deb-9, broker.version.fallback: 0.8.2.2, client.id: some-deb-id23, default.topic.config: {'auto .offset.reset ':' последний ',}} - person davidbaraff; 23.01.2017