Python-Kafka:程序以交互模式运行,而不是以脚本模式运行

时间:2017-10-13 12:00:37

标签: python apache-kafka kafka-python

我正尝试通过Machine_2中的python脚本向Machine_1中的Kafka主题发送一些消息。 Machine_2Machine_1都位于同一网络中,并且都是Azure中的VM。

代码:sampl.py

from kafka import KafkaProducer
Producer = KafkaProducer(bootstrap_servers=['Machine_2:9092'])
Producer.send('test', 'hello')

如果我将上述代码作为

运行
  

python sampl.py

没有消息到达Machine_2。但是,如果我这样做:

  

python -i sampl.py

然后消息到达Machine_2。我使用kafka-console-consumer.sh检查了相同的内容。我在yum updateMachine_1认为可能会遗漏一些库。但还没有运气。

感谢。

1 个答案:

答案 0 :(得分:0)

kafka-python维护者在这里。 Producer.send('test', b'hello')是异步的,不提供即时交付。你可能会看到python解释器在生产者有机会完成网络发送之前关闭。

如果要等到完成脚本之前发送消息,则应使用.get(timeout = ...)。所以试试:

Producer.send('test', b'hello').get(timeout=1000)

或者,您可以调用flush()对所有未发送的消息执行相同的操作:

Producer.flush(timeout=1000)