Ubuntu上Kafka网络问题的排查与修复
一 快速定位清单
ss -ltnp | egrep ':(9092|2181)'。若只看到 :::9092 而客户端是 IPv4,多半是只绑定到了 IPv6。nc -vz 127.0.0.1 9092 与 nc -vz <服务器IP> 9092 验证本机与对外地址的可达性。nc -vz <broker_ip> 9092、ping <broker_ip>,必要时 traceroute <broker_ip> 定位网络路径问题。二 常见症状与修复
只绑定到 IPv6 导致 IPv4 客户端连不上
现象:ss -ltnp 显示 tcp6 0 0 :::9092 :::* LISTEN,IPv4 客户端超时。
修复:在 Kafka 启动环境中启用仅 IPv4 栈,例如在 kafka/bin/kafka-run-class.sh 或 systemd 服务 Environment 中设置:KAFKA_OPTS="-Djava.net.preferIPv4Stack=true",重启 Broker。
advertised.listeners 配置不当导致“能连上但无法生产/消费”
现象:客户端能连上 9092,但报 “Leader not available” 或元数据异常。
修复:在 config/server.properties 明确指定对外地址,例如:
listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://<服务器公网或内网IP>:9092
zookeeper.connect=localhost:2181
说明:对外部客户端,advertised.listeners 必须是客户端可达的 IP/域名;本机回环测试可用 localhost。
防火墙或云安全组未放行端口
现象:跨机 nc 超时或连接被拒绝。
修复:
sudo ufw allow 9092/tcp、sudo ufw allow 2181/tcpsudo firewall-cmd --add-port=9092/tcp --permanent && sudo firewall-cmd --reloadsudo iptables -A INPUT -p tcp --dport 9092 -j ACCEPT && sudo iptables-save | sudo tee /etc/iptables/rules.v4主机名解析或路由问题
现象:内网能通,外网不通;或 ping 正常但端口不通。
修复:
/etc/hosts 为 <服务器IP> 添加可解析的主机名,避免解析到错误地址。ip route 检查默认路由与网卡;必要时修正 /etc/netplan/*.yaml 的 addresses/gateway4/nameservers 后执行 sudo netplan apply(Ubuntu 18.04+/20.04+/22.04+ 常用 netplan)。三 关键配置示例 server.properties
仅内网访问(推荐默认):
listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://<内网IP>:9092
zookeeper.connect=localhost:2181
同时提供外网访问(双监听器):
listeners=PLAINTEXT://0.0.0.0:9092,EXTERNAL://0.0.0.0:9094
listener.security.protocol.map=PLAINTEXT:PLAINTEXT,EXTERNAL:PLAINTEXT
advertised.listeners=PLAINTEXT://<内网IP>:9092,EXTERNAL://<公网或外网域名/IP>:9094
inter.broker.listener.name=PLAINTEXT
zookeeper.connect=localhost:2181
仅 IPv4 环境:在上述任一配置基础上,增加启动参数:KAFKA_OPTS="-Djava.net.preferIPv4Stack=true"。
四 网络性能与稳定性优化
server.properties 中结合负载适当调优 socket.send.buffer.bytes、socket.receive.buffer.bytes 与 max.connections。