我正在使用 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(...)
但是:在我与这个新生产者发送第一条消息后,延迟仅降至接近零。后续消息的延迟接近 2ms 标记。
但是第一条消息的延迟大约为 1 秒。为什么?
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
更低,看看是否有帮助。