仅当短暂延迟代码时,使用kafka python发送数据才有效

仅当短暂延迟代码时,使用kafka python发送数据才有效,python,python-2.7,apache-kafka,Python,Python 2.7,Apache Kafka,我正在使用Kafka python向Kafka主题发送一些数据。有一段时间我一直无法将数据发送到卡夫卡主题,直到我发现如果我短暂地延迟代码,它就会工作 from kafka import KafkaProducer from time import sleep producer = KafkaProducer(bootstrap_servers="localhost:9092") producer.send("topic", "foo") sleep(.1) 如果不使用sleep(.1),此

我正在使用Kafka python向Kafka主题发送一些数据。有一段时间我一直无法将数据发送到卡夫卡主题,直到我发现如果我短暂地延迟代码,它就会工作

from kafka import KafkaProducer
from time import sleep

producer = KafkaProducer(bootstrap_servers="localhost:9092")
producer.send("topic", "foo")
sleep(.1)

如果不使用
sleep(.1)
,此代码对我无效。这就像发送数据需要时间才能正常工作一样。kafka python客户端中是否有处理此问题的内容?还是更好的解决方案?

一年后,但对于任何看到这一点的人来说,解决方案如下。这里的问题是脚本结尾和send调用的竞争条件,这就是sleep()命令工作的原因

kafka模块应该更好地处理python出口,或者至少输出一些东西到标准输出/错误,因此这种行为不是沉默的

从kafka python github:

# Block until a single message is sent (or timeout)
future = producer.send('foobar', b'another_message')
result = future.get(timeout=60)

现在,您可以保证脚本将被阻止,直到消息被确认发布。

有多个Kafka Python客户端可用。你用哪一种@MatthiasJ.Sax@vesche你能解开这个谜吗?为什么它需要睡眠才能让信息出现在卡夫卡上?我也经历过同样的挣扎,直到我遇到了这个职位。然后尝试,睡眠(.1)成功了!对于为什么这会起作用,我感到恼火而不是宽慰。请分享您可能发现的与此相关的任何信息。@activelearner我最终发现,如果您发送这样的单个条目,它将无法正常工作,而且会有某种延迟。但是,如果您循环通过某个内容并发送许多实体,则不需要延迟。最后,我在kafka上遇到了很多问题,结果我使用了不同的MQ系统。有一个
producer.flush(timeout=10)
producer.close(timeout=10)
,但在
kafka python==2.0.2
中这对我不起作用。我想我错过了一些明显的东西。