即使成功建立连接并在kafka使用者控制台中获取消息后,也无法使用来自kafka主题的消息(使用Python)

时间:2019-04-29 07:06:37

标签: python python-3.x apache-kafka kafka-consumer-api debezium

我有一个使用Kafka的Debezium设置。我能够按照文档中所述从kafka控制台使用消息。但是,当我在本地使用Python创建kafka使用者时,无法使用消息。应该注意的是,kafka控制台工作正常!

我尝试调查此问题,但无法具有类似的环境/情况

我要连接的python代码是:

from kafka import KafkaConsumer
consumer = KafkaConsumer('dbserver1.inventory.customers', group_id='my-group', bootstrap_servers=['localhost:9092'], auto_offset_reset='earliest')
for message in consumer:
    print(message)

无论现有消息或推送到该主题的新消息,该消息都将变为空白。

我确定消息存在,因为当我打开控制台使用者时,可以看到消息。

只需在整个设置中弄清楚: 我已遵循此(https://github.com/debezium/debezium-examples/tree/master/tutorial#using-mongodb)文档的每一步(最后一步除外)。 一切正常,但我的Python代码有效。 我还尝试使用kafka:9092引导服务器创建使用者,但最终导致错误:

kafka.errors.NoBrokersAvailable: NoBrokersAvailable

我的本​​地计算机是Mac OS。

仅供参考: 我能够获得所有其他信息,例如主题:

>>> consumer = KafkaConsumer('dbserver1.inventory.customers', group_id='my-group', bootstrap_servers=['localhost:9092'], auto_offset_reset='earliest')
>>> consumer.topics()
{'my_connect_offsets', 'my_connect_configs', 'dbserver1.inventory.orders', 'connect-status', 'dbserver1.inventory.customers', 'dbserver1.inventory.products'}

我正在通过命令启动消费者:

docker-compose -f debezium-mongodb.yaml exec kafka /kafka/bin/kafka-console-consumer.sh \
    --bootstrap-server kafka:9092 \
    --from-beginning \
    --property print.key=true \
    --topic dbserver1.inventory.customers

1 个答案:

答案 0 :(得分:0)

没有看到您的撰写文件,根据您的docker命令,localhost:9092可能无法在您的Python代码中工作

  1. 如果您的Python代码未在容器中运行,则需要从其他端口读取。如果它在容器中运行,则必须使用kafka:9092
  2. 您使用的端口取决于所宣传的容器侦听器

Connect to Kafka running in Docker from local machine