我正在使用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生产者。
感谢您的帮助。
答案 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')