在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
相关产品推荐
相关产品推荐

