使用Go的Sarama库编写Kafka生产者遇域名解析错误求助
问题原因及解决方案
问题根源
你遇到的lookup b92bf8cba740: no such host错误,是因为Docker中的Kafka容器默认把自身的容器ID作为对外告知的地址(advertised.listeners配置项)。当你的Go客户端通过localhost:9092连接到Kafka后,Kafka会把这个容器ID地址返回给客户端,而宿主机无法解析这个内部容器ID,因此出现DNS查找失败的错误。
修复步骤
1. 停止并移除现有Kafka容器
docker stop kafka-container docker rm kafka-container
2. 重新启动Kafka容器,指定正确的对外访问地址
添加ADVERTISED_LISTENERS环境变量,让Kafka告知客户端使用宿主机的localhost:9092进行通信:
docker run -d \ --name kafka-container \ -p 9092:9092 \ --link vigilant_sammet:zookeeper \ -e ZOOKEEPER_HOST=zookeeper \ -e ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 \ ubuntu/kafka:3.1-22.04_beta
3. 重新运行你的Go生产者代码
此时客户端就能正确获取到Kafka的可访问地址,消息应该可以正常发送。
补充说明
你的Go代码本身没有问题,核心问题出在Kafka容器的网络配置上。ADVERTISED_LISTENERS是Kafka的关键配置,它决定了客户端实际用来和Kafka通信的地址,必须设置为客户端(这里是宿主机)能够直接访问的地址。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

