You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KafkaJS连Docker Kafka报Failed to connect to seed broker

问题根因

报错getaddrinfo ENOTFOUND broker的核心原因是主机名解析失败:

  • broker是Docker Compose为Kafka容器分配的内部网络域名,仅在当前compose创建的容器内网环境下可被识别解析
  • 你在宿主机直接运行node producer.js,宿主机的DNS系统不存在broker对应的地址记录,自然无法建立连接
修复方法

直接修改producer.js中的Kafka连接配置,将broker地址替换为宿主机可访问的监听地址即可:

const { Kafka } = require('kafkajs')

const kafka = new Kafka({
  clientId: 'my-app',
  brokers: ['localhost:9092'], // 将原配置中的broker:9092替换为localhost:9092
})

const producer = kafka.producer()

const main = async () => {
    await producer.connect()
    await producer.send({
      topic: 'quickstart',
      messages: [
        { value: 'Hello KafkaJS user!' },
      ],
    })

    await producer.disconnect()
}

main();
配置逻辑说明

你当前docker-compose中配置的两个advertised listener本身逻辑是正确的,分工如下:

  • PLAINTEXT_INTERNAL://broker:29092:供同Docker网络内的其他服务(比如你注释掉的kafka_ui、其他容器内部署的应用)访问Kafka使用
  • PLAINTEXT://localhost:9092:供宿主机、外部网络的客户端访问Kafka使用,已经通过端口映射把容器的9092端口绑定到了宿主机9092端口,宿主机直接访问localhost:9092即可正常通信

改完配置后重新执行node producer.js即可正常发送消息,不会再触发域名解析失败的报错。

内容的提问来源于stack exchange,提问作者Rahul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 11:54:21