0

我正在使用 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 秒的延迟。为什么?

4

1 回答 1

3

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

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

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

于 2017-01-21T17:21:46.810 回答