我在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')
运行脚本时,生产者脚本立即完成,并且使用者脚本不会打印任何消息
任何想法,我在这里可能会缺少什么。
谢谢
答案 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()
除此之外,您的逻辑看起来还不错(并为我工作)。