消费者在运行的生产者和消费者python脚本上未显示任何消息

时间:2019-06-18 10:01:18

标签: apache-kafka ubuntu-16.04 kafka-python

我在Ubuntu服务器上设置了Apache Kafka,并按照https://kafka.apache.org/quickstart中提到的前五个步骤进行了测试,一切正常。

然后我继续安装kafka-python 1.4.6以在python中进行测试,并编写了简单的生产者和使用者脚本。

我的侦听器配置
listeners = PLAINTEXT:// localhost:9092
advertised.listeners = PLAINTEXT:// localhost:9092

以下是脚本

consum.py

from kafka import KafkaConsumer

consumer = KafkaConsumer('my-topic')
for message in consumer:
        print (message)

prod.py

from kafka import KafkaProducer
from kafka.errors import KafkaError

producer = KafkaProducer(bootstrap_servers='localhost:9092',api_version=(0, 10, 1))

producer.send('my-topic', b'Hello')

运行脚本时,生产者脚本立即完成,并且使用者脚本不会打印任何消息

任何想法,我在这里可能会缺少什么。
谢谢

1 个答案:

答案 0 :(得分:1)

问题在于您的生产者脚本在发送消息之前完成了。运行send()后,Python到达脚本的最后一行并立即停止运行。

您需要调用flush()来强制运行时在终止之前等待所有消息发送。

from kafka import KafkaProducer
from kafka.errors import KafkaError

producer = KafkaProducer(bootstrap_servers='localhost:9092',api_version=(0, 10, 1))

producer.send('my-topic', b'Hello')

producer.flush()

除此之外,您的逻辑看起来还不错(并为我工作)。