Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
卡夫卡:Docker容器和NoBrokersAvailable错误_Docker_Apache Kafka - Fatal编程技术网

卡夫卡:Docker容器和NoBrokersAvailable错误

卡夫卡:Docker容器和NoBrokersAvailable错误,docker,apache-kafka,Docker,Apache Kafka,我使用以下方式运行卡夫卡: docker run -p 2181:2181 -p 9092:9092 --env ADVERTISED_HOST=192.168.99.100 --env ADVERTISED_PORT=9092 spotify/kafka 据 --p标志用于发布网络端口。在容器内,ZooKeeper在2181监听,Kafka在9092监听。如果我们不使用-p发布它们,那么它们在容器外部是不可用的,因此我们不能真正使用它们。 -–env标志用于设置环境变量。根据spotify/

我使用以下方式运行卡夫卡:

docker run -p 2181:2181 -p 9092:9092 --env ADVERTISED_HOST=192.168.99.100 --env ADVERTISED_PORT=9092 spotify/kafka
据 --p标志用于发布网络端口。在容器内,ZooKeeper在2181监听,Kafka在9092监听。如果我们不使用-p发布它们,那么它们在容器外部是不可用的,因此我们不能真正使用它们。 -–env标志用于设置环境变量。根据spotify/kafka图像的文档,这些是必需的 -最后一部分指定了要运行的映像:spotify/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.nobrokersavable:nobrokersavable


如何确保两个Docker容器可以通信?

您必须提供运行Kafka服务器的Docker容器IP,而不是localhost

producer=KafkaProducer(引导服务器=':9092', value\u serializer=lambda v:json.dumps(v.encode('utf-8'))


使用容器ID运行:docker inspect在底部的“NetworkSettings”下,您可以找到“IPAddress”,但出现下一个错误:KafkaTimeoutError。我为它创建了一个新问题: