KafkaProducer for Python在命令行上发送消息,但在通过Python脚本执行时不发送消息

KafkaProducer for Python在命令行上发送消息,但在通过Python脚本执行时不发送消息,python,apache-kafka,Python,Apache Kafka,我已经让我的动物园管理员和经纪人负责了 当我从命令行发送消息时,如下所示: from kafka import KafkaProducer producer = KafkaProducer(bootstrap_servers='localhost:9092') producer.send('topic', b'some_message_bytes') 我可以在我的消费者的另一端接收它,运行以下命令: from kafka import KafkaConsumer consumer = Kafk

我已经让我的动物园管理员和经纪人负责了

当我从命令行发送消息时,如下所示:

from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers='localhost:9092')
producer.send('topic', b'some_message_bytes')
我可以在我的消费者的另一端接收它,运行以下命令:

from kafka import KafkaConsumer
consumer = KafkaConsumer('topic')
for msg in consumer:
    print msg
然而,当我在python脚本中包含与生产者完全相同的代码并运行它时,使用者不会打印消息,而且,它甚至不会被发送。我通过在命令行上运行以下命令确认了这一点:

./bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list
localhost:9092 --topic topic --time -1 --offsets 1 | awk -F  ":" '{sum +=
 $3} END {print sum}'
显示当前主题中的邮件数。当我从python producer的命令行版本发送更多消息时,它会上升,但在运行python脚本后,主题中的消息数量不会增加


有人知道这里发生了什么吗?

在shell中运行程序与在文件中运行程序是不同的。在shell中,当您发送消息时,它在Kafka中以固定的刷新时间发送,并且Kafka producer实例在shell中仍然处于活动状态。在文本文件中运行代码时,即使在刷新消息之前,程序也会结束,并且生产者对象会被垃圾收集

要在生产者代码中修复此问题,请使用
producer.flush()

from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers='localhost:9092')
producer.send('topic', b'some_message_bytes')
# This is important
producer.flush()