【问题标题】:kafka producer parameters require one message sent to take effectkafka生产者参数需要发送一条消息才能生效
【发布时间】:2017-06-05 21:13:57
【问题描述】:

我正在使用 confluent-kafka-python (https://github.com/confluentinc/confluent-kafka-python) 使用 Python 向 Kafka 发送一些消息。我不经常发送消息,所以希望延迟非常低。

如果我这样做,我可以让消息以大约 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 秒的延迟。为什么?

【问题讨论】:

  • 主题在您发布之前是否已经存在?如果不是,那么额外的时间可能是在发布第一个消息之前在代理上自动创建主题所需的时间。

标签: python apache-kafka latency confluent-platform


【解决方案1】:

librdkafka 的作者 Magnus Edenhill 记录了一些有用的参数来设置以减少任何 librdkafka 客户端的延迟:

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

您没有显示您的消费者参数,但从您的描述来看,消费者在发布第一条消息之前正在轮询并且正确地没有得到任何东西(空消息),因此它会等待默认的 500 毫秒 fetch.error.backoff.ms 间隔之前尝试再次轮询并获得第一条消息。之后,消息可能来得足够快,以至于不会触发错误回退。也许尝试将fetch.error.backoff.ms 设置得更低,看看是否有帮助。

【讨论】:

  • 消费者中没有有趣的设置。我不认为你的答案是正确的,因为如果我启动一个消费者并让它运行,它总是取决于 生产者 是否有延迟。
  • 我创建了一个生产者,并让它发送一条消息。然后我创建了一个新的消费者,auto.offset.reset='latest'。开始消费者投票。第一条消息有短暂的 3 毫秒延迟。所以问题显然在生产者方面,第一条消息总是被延迟。还有其他想法吗?请注意,这并不重要,只是好奇。
  • 最后,消息发送非常缓慢,因为我是从 python 解释器(生产者端)手动发送它们的。消费者只是轮询。消费者配置:conf = {“bootstrap.servers”:服务器,“group.id”:“deb-9”,“broker.version.fallback”:“0.8.2.2”,“client.id”:“some- deb-id23", "default.topic.config" : { 'auto.offset.reset' : 'latest', }}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 2016-01-01
相关资源
最近更新 更多