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

Node.js连接WSL Ubuntu上的Kafka 3.0.0报ECONNREFUSED错误如何解决?

解决方案

核心根因

该问题大多由WSL2的NAT网络隔离特性导致:WSL2拥有独立的虚拟网卡,与Windows侧的127.0.0.1本地回环地址不互通,且Kafka的监听和广播地址配置不正确也会导致连接失败。

分步排查修复

第一步:确认Node.js运行环境

先明确你的Node.js代码运行位置,对应不同方案:

场景A:Node.js运行在Windows侧,Kafka运行在WSL Ubuntu

  1. 获取WSL实例的内网IP
    在WSL Ubuntu终端执行命令:
    hostname -I
    输出的第一个IP就是WSL的可访问内网IP,格式通常为172.xx.xx.xx。
  2. 修改Kafka配置文件server.properties
# 监听所有网卡的请求,允许WSL外部的Windows侧访问
listeners=PLAINTEXT://0.0.0.0:9092
# 对外广播的Kafka地址,填写上一步获取的WSL内网IP
advertised.listeners=PLAINTEXT://<替换为你的WSL内网IP>:9092
  1. 修改Node.js代码里的brokers配置
    把brokers: ["127.0.0.1:9092"]改为brokers: ["<替换为你的WSL内网IP>:9092"]
  2. 重启Kafka服务即可正常连接。

如果不想每次WSL重启后IP变化都修改配置,可以在Windows管理员权限终端执行端口转发命令,实现Windows侧127.0.0.1:9092直接转发到WSL对应端口:
netsh interface portproxy add v4tov4 listenport=9092 listenaddress=0.0.0.0 connectport=9092 connectaddress=<替换为你的WSL内网IP>

场景B:Node.js和Kafka都运行在WSL Ubuntu

  1. 先在WSL终端测试端口连通性,执行命令:
    nc -zv 127.0.0.1 9092
    如果返回连接成功,说明端口正常,检查你的Node.js依赖是否正确安装,kafkajs版本是否兼容Kafka 3.0.0。
  2. 如果端口不通,检查WSL内部是否有防火墙规则拦截,或者Kafka启动日志是否有报错。

额外注意

你的代码中producer.send方法参数存在错误,topics字段应为单数topic,后续发送消息时需要修正:

await producer.send({
    topic: "hashtags", // 原代码这里写错为topics
    messages: [
        {
            value: name
        }
    ]
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:45:00