Python 卡夫卡制作人flush和poll之间的差异

Python 卡夫卡制作人flush和poll之间的差异,python,apache-kafka,kafka-producer-api,confluent-platform,Python,Apache Kafka,Kafka Producer Api,Confluent Platform,我们有一个卡夫卡消费者,它将阅读消息并执行这些操作,然后使用下面的脚本再次发布到卡夫卡主题 生产者配置: { "bootstrap.servers": "localhost:9092" } 我没有配置任何其他配置,如queue.buffering.max.messagesqueue.buffering.max.msbatch.num.messages 我假设这些都将是默认值 我的理解是:当内部队列到达queue.buffering.max.ms或batch.num.messages时,消息

我们有一个卡夫卡消费者,它将阅读消息并执行这些操作,然后使用下面的脚本再次发布到卡夫卡主题

生产者配置:

{
  "bootstrap.servers": "localhost:9092"
}
我没有配置任何其他配置,如
queue.buffering.max.messages
queue.buffering.max.ms
batch.num.messages

我假设这些都将是默认值

我的理解是:当内部队列到达queue.buffering.max.ms或batch.num.messages时,消息将在单独的线程中发布到Kafka。在我的配置队列中,queue.buffering.max.ms为0,因此当我调用product()时,所有消息都将立即发布。如果我错了,请纠正我

我的制作人片段:

def send(topic, message):
    p.produce(topic, json.dumps(message), callback=delivery_callback(err, msg))
    p.flush()
据我所知,在每条消息之后使用flush,producer将成为sync producer。如果我使用上面的脚本,发布到卡夫卡大约需要45毫秒

如果我将上面的代码片段更改为

def send(topic, message):
    p.produce(topic, json.dumps(message), callback=delivery_callback(err, msg))
    p.poll(0)
是否有任何性能将得到改进?你能澄清我的理解吗


感谢客户机手册中解释了
flush()
poll()
之间的区别

例如,它指出:

等待生产者队列中的所有消息被传递。这是一个 调用poll()直到len()为零或 经过可选超时

用于:

轮询生产者的事件并调用相应的回调 (如已登记)

send()
之后调用
poll()
不会使生产者同步,因为刚刚发送的消息不太可能已经到达代理,并且已经将交付报告发送回客户端


相反,
flush()
将阻塞,直到先前发送的消息已送达(或出错),从而有效地使生产者同步。

感谢您提供的信息。这对我来说真的很有效。时间从45毫秒到~0.2毫秒不等
def send(topic, message):
    p.produce(topic, json.dumps(message), callback=delivery_callback(err, msg))
    p.poll(0)