【问题标题】:Kafka Consumer from python NoBrokersAvailable来自 python NoBrokersAvailable 的 Kafka 消费者
【发布时间】:2019-08-10 12:53:06
【问题描述】:

我正在使用 docker 通过命令运行一个 kafka 生产者

kafka-console-producer.sh --topic USER_CREATED_TOPIC --broker-list xxx.xx.x.x:9092`

其中 x 是来自分配的代理 ip 的数字。

我的server.properties 文件包含

advertised.port=9092
advertised.host.name=xxx.xx.x.x.
listeners=PLAINTEXT://xxx.xx.x.x:9092 line
advertised.listeners=PLAINTEXT://xxx.xx.x.x:9092

每当我使用命令从 docker 容器启动消费者时

kafka-console-consumer.sh --topic USER_CREATED_TOPIC --from-beginning --bootstrap-server xxx.xx.x.x:9092

并在我的生产者控制台中写一些东西,我会在消费者中得到结果。(这里没有错误)

但是,当我尝试通过 python 脚本连接时:

from kafka import KafkaConsumer
  consumer = 
  kafkaConsumer("USER_CREATED_TOPIC",bootstrap_servers= 
  ['xxx.xx.x.x:9092'])
for msg in consumer:
     print (msg)

我收到NoBrokersAvailable 错误。

我在 stackoverflow 上阅读了几个线程(根据这些答案在 server.properties 上列出了添加的项目),但我仍然无法通过 python 连接到 kafka 生产者。

感谢任何帮助。

【问题讨论】:

  • 修改server.properties文件后是否重启了Kafka broker?
  • @GiorgosMyrianthous 是的,我做到了
  • 尽管即使我使用 docker commit 更改似乎也不适用。

标签: python apache-kafka


【解决方案1】:

我看到的唯一语法问题是服务器地址不应该在列表中,所以像这样:

from kafka import KafkaConsumer
consumer = KafkaConsumer('sample', bootstrap_servers='0.0.0.0:9092')
for message in consumer:
    print(message)

没有正在运行的集群也会给出该错误。首先创建一个主题:

kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic sample

然后测试是否存在:

bin/kafka-topics.sh --list --zookeeper localhost:2181
# sample

最后确保有一个生产者创建要收听的消息:

from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers='0.0.0.0:9092')
producer.send('sample', b'Hello, World!')
producer.send('sample', key=b'message-two', value=b'This is Kafka-Python')

【讨论】:

    猜你喜欢
    • 2019-07-01
    • 2017-04-14
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多