【问题标题】:No messages displayed by consumer on running producer and consumer python scripts消费者在运行生产者和消费者 python 脚本时没有显示消息
【发布时间】:2019-06-18 10:01:18
【问题描述】:

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

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

我的监听器配置
listeners=PLAINTEXT://localhost:9092
Advertising.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')

在运行脚本时,生产者脚本会立即完成,消费者脚本不会打印任何消息

我可能在这里遗漏的任何想法。
谢谢

【问题讨论】:

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


    【解决方案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()
    

    除此之外,您的逻辑看起来不错(并且对我有用)。

    【讨论】:

    • 通过添加 producer.flush() 到生产者脚本,消费者能够打印消息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    相关资源
    最近更新 更多