为什么 kafka 生产者向我显示错误 kafka.conn:DNS 查找失败 <container id>:9092?

Hib*_*man 6 python apache-kafka docker

我公开端口 9092,然后在 docker 内运行 kafka 代理。但是当我运行 python 脚本时出现错误

ERROR:kafka.conn:DNS lookup failed for b5c5b06f6761:9092 (AddressFamily.AF_UNSPEC)
Run Code Online (Sandbox Code Playgroud)

我尝试使用 docker ip 和 machine ip 而不是 localhost 但给出了相同的错误。

这是我的代码。

producer = KafkaProducer(bootstrap_servers=['localhost:9092'],
                         value_serializer=lambda x:
                         dumps(x).encode('utf-8'))

producer.send('vtintel', value={'id':123})
Run Code Online (Sandbox Code Playgroud)

tnu*_*nov 8

bitnami/kafka 也有同样的问题。但后来我意识到我需要在 docker-compose.yml 中启用使用外部客户端访问 Kafka。有关更多信息,请参阅https://hub.docker.com/r/bitnami/kafka/ “使用内部和外部客户端访问 Kafka”部分。

To do so, add the following environment variables to your docker-compose:

    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
+     - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
+     - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,PLAINTEXT_HOST://:29092
+     - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092

And expose the extra port:

    ports:
      - '9092:9092'
+     - '29092:29092'


and access it by 'localhost:29092' not 'localhost:9092' in your python-kafka code.

Run Code Online (Sandbox Code Playgroud)

如果不明显,应该将其添加到 kafka 容器(而不是 Zookeeper 容器)


小智 -1

我之前在使用最新的 kafka 版本时也遇到过类似的问题。尝试将本地地址指定为“127.0.0.1”而不是“localhost”。这可能会有所帮助。