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

在Windows子系统Linux中运行Kafka时出现连接超时问题求助

解决WSL中Kafka无法被Windows客户端访问的超时问题

这个问题我之前帮朋友排查过,核心原因就是Kafka默认只绑定了WSL内部的localhost,Windows系统没法通过这个地址连接到WSL里的Kafka服务,按照下面的步骤一步步来就能解决:

1. 获取WSL的实际IP地址

先打开WSL的Ubuntu终端,执行以下命令查看当前WSL的网卡IP:

ip addr show eth0 | grep inet | awk '{print $2}' | cut -d/ -f1

你会得到类似 172.17.xx.xx 的IP地址,记下来,后面要用到。

2. 修改Kafka的核心配置

找到你Kafka安装目录下的 config/server.properties 文件,用编辑器打开(比如vim config/server.properties),修改以下两个关键配置:

  • 将 listeners 改为监听所有网卡:
    listeners=PLAINTEXT://0.0.0.0:9092
    
  • 设置 advertised.listeners 为刚才获取的WSL IP,这是Kafka告诉客户端的连接地址:
    advertised.listeners=PLAINTEXT://你的WSL_IP:9092
    
    注意把你的WSL_IP替换成实际的IP,比如172.17.123.45。

3. 重启Kafka和Zookeeper服务

先停掉正在运行的服务,再重新启动:

# 停止Kafka
bin/kafka-server-stop.sh
# 停止Zookeeper
bin/zookeeper-server-stop.sh

# 后台启动Zookeeper
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
# 后台启动Kafka
bin/kafka-server-start.sh -daemon config/server.properties

4. 打通Windows和WSL的网络连接

检查连通性

打开Windows的命令提示符(CMD),ping一下刚才的WSL IP:

ping 你的WSL_IP

如果ping不通,需要做以下两步:

  • WSL端开放端口:在Ubuntu终端执行命令允许9092端口的访问:
    sudo ufw allow 9092
    
  • Windows端开放防火墙:打开「控制面板→Windows Defender防火墙→高级设置→入站规则」,新建一个端口规则,允许9092端口的TCP连接。

5. 测试Windows端的生产者

用kafka-console-producer.bat测试

在Windows的命令提示符里,进入Kafka的Windows安装目录,执行:

kafka-console-producer.bat --broker-list 你的WSL_IP:9092 --topic test

现在输入消息应该就能正常发送了。

Java程序修改配置

把你的Java生产者代码里的bootstrap.servers配置改成WSL的IP:

Properties props = new Properties();
props.put("bootstrap.servers", "你的WSL_IP:9092");
// 其他配置保持不变

额外优化(可选)

因为WSL的IP每次重启可能会变化,你可以把WSL设置为固定IP,或者在Windows的C:\Windows\System32\drivers\etc\hosts文件里添加一条映射:

你的WSL_IP  wsl-kafka

这样以后就可以用wsl-kafka:9092来连接,不用每次改IP了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:18:43