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

时间:2019-05-05 15:33:17

标签: 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})

4 个答案:

答案 0 :(得分:2)

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容器)中

答案 1 :(得分:0)

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

答案 2 :(得分:0)

Docker仅在其自己的网络中处理DNS,而不是在您的主机中处理

您需要将Kafka连接到advertise itself externally (on localhost),这与转发端口不一样

据我所知-p 9092:9092甚至不是您正在使用的容器映像所暴露的端口

答案 3 :(得分:0)

尽管回复较晚,但以后可能会对任何人有所帮助。我遇到了与您使用edX的dockerized实现相同的问题。 因此,要解决该问题,只需在          
/etc/hosts
Docker容器的文件。 首先是您的IP地址,然后是查找失败的对象。 例如,在您的情况下,b5c5b06f6761的查找失败,所以:

173.16.18.22     b5c5b06f6761

注意:这里我使用的是虚拟IP地址。