使用kafka-python发送数据仅在短暂延迟代码时起作用

时间:2016-09-28 16:45:10

标签: python python-2.7 apache-kafka

我正在使用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客户端中有什么东西可以解决这个问题吗?还是更好的解决方案?

1 个答案:

答案 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)

现在,您可以保证在确认发布消息之前,您的脚本将会阻止。