我正在使用kafka-python向Kafka主题发送一些数据。我挣扎着无法将数据发送到我的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客户端中有什么东西可以解决这个问题吗?还是更好的解决方案?
答案 0 :(得分:0)
一年之后,但对于看到此问题的任何人来说,解决方案如下。这里的问题是脚本结束和发送调用的竞争条件,这就是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)
现在,您可以保证在确认发布消息之前,您的脚本将会阻止。