来自Python NoBrokersAvailable的Kafka Consumer

时间:2019-03-19 21:42:47

标签: python apache-kafka

我正在使用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生产者。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

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')