我使用以下方式运行Kafka:
docker run -p 2181:2181 -p 9092:9092 --env ADVERTISED_HOST=192.168.99.100 --env ADVERTISED_PORT=9092 spotify/kafka
根据https://ngeor.wordpress.com/2017/03/25/kafka-with-docker-a-docker-introduction/ - -p标志用于发布网络端口。在容器内部,ZooKeeper在2181监听,Kafka在9092监听。如果我们不用-p发布它们,它们在容器外部不可用,所以我们不能真正使用它们。 - -env标志设置环境变量。根据spotify / kafka图像的文档需要这些 - 最后一部分指定我们要运行的图像:spotify / kafka
现在我想将生产者的消息发送到这个kafka端口。从另一个docker容器中:
from kafka import KafkaProducer
import json
producer = KafkaProducer(bootstrap_servers='localhost:9092',
value_serializer=lambda v: json.dumps(v).encode('utf-8'))
但是这会产生错误:kafka.errors.NoBrokersAvailable:NoBrokersAvailable
我怎样才能确保两个Docker容器可以通信?
答案 0 :(得分:0)
您必须提供运行Kafka服务器的docker容器IP,而不是localhost。
喜欢
producer = KafkaProducer(bootstrap_servers =':9092', value_serializer = lambda v:json.dumps(v).encode(' utf-8'))