python - 为什么kafka生产者向我显示错误kafka.conn:<容器ID>:9092的DNS查找失败?

标签 python docker apache-kafka

我暴露了端口9092,然后在docker内部运行kafka代理。
但是当我运行python脚本时我得到了错误

ERROR:kafka.conn:DNS lookup failed for b5c5b06f6761:9092 (AddressFamily.AF_UNSPEC)

我尝试了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})

最佳答案

bitnami / kafka也存在相同问题。但是后来我意识到我需要在docker-commpose.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.

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

关于python - 为什么kafka生产者向我显示错误kafka.conn:<容器ID>:9092的DNS查找失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55993611/

相关文章:

python - CMake错误: could NOT find Python (missing: Python_NumPy_INCLUDE_DIRS NumPy) (found version "2.7.17")

python - 如何合并2个数组python(类似于SQL Join)

docker - 从Kubernetes日志中提取行

linux - 如何在主机上跟踪容器

linux - Kafka Broker 每天崩溃——OOM killer

apache-kafka - Storm UI 不正确的值和毛细管工具

python - 如果实例记录在类字典中,__del__ 不起作用

java - Docker PostgreSQL 中的连接被拒绝

java - 测量 Kafka Streams 中的处理吞吐量

python - 从 Python 中的字符串推断适当的数据库类型声明