Docker部署Kafka Kraft后Java客户端连接失败求助
问题排查与解决方案
错误原因
报错java.net.UnknownHostException: kafka1的核心原因:Kafka向客户端返回的节点地址是kafka1:39092,但本地Java客户端无法解析kafka1这个主机名。这是因为Docker配置的KAFKA_ADVERTISED_LISTENERS中,EXTERNAL监听器地址设置为容器内部主机名kafka1,而非本地主机能识别的地址。
修复步骤
1. 修正Docker Compose中的Kafka配置
修改kafka1服务的环境变量,调整监听器的绑定与对外公告地址:
environment: # 让EXTERNAL监听器绑定容器所有网络接口,确保端口映射生效 KAFKA_LISTENERS: BROKER://kafka1:19092,EXTERNAL://0.0.0.0:39092,CONTROLLER://kafka1:9093 # EXTERNAL使用本地可解析的地址,让客户端能正确连接 KAFKA_ADVERTISED_LISTENERS: BROKER://kafka1:19092,EXTERNAL://localhost:39092 # 其余配置保持不变...
2. 优化Java代码(可选,测试环境)
- 若测试需要自动创建topic,可添加以下配置(生产环境不建议开启):
properties.setProperty("auto.create.topics.enable", "true");
- 添加发送回调,方便排查发送失败细节:
kafkaProducer.send(producerRecord, (metadata, exception) -> { if (exception != null) { exception.printStackTrace(); } else { System.out.println("消息发送成功:" + metadata.topic() + " - 分区:" + metadata.partition()); } });
3. 重启Kafka服务
修改配置后,重启Docker容器使配置生效:
docker-compose down docker-compose up -d
验证
重启服务后运行Java代码,即可正常推送消息,不会再出现UnknownHostException。
内容的提问来源于stack exchange,提问作者Marco Aviles
相关产品推荐
相关产品推荐

