Ubuntu上Kafka网络优化实操指南
一 基础网络与监听配置
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
应用:sudo netplan apply。确保主机名可解析(/etc/hosts 或 DNS)。listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://<服务器公网或内网IP>:9092
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
sudo ufw allow 9092/tcp;如使用 ZooKeeper,放行 2181/tcp。config/kraft/server.properties 中配置 process.roles=broker,controller、controller.quorum.voters=1@broker1:9093,2@broker2:9093,3@broker3:9093、listeners=CONTROLLER://broker1:9093,PLAINTEXT://0.0.0.0:9092、advertised.listeners=PLAINTEXT://<IP>:9092、controller.listener.names=CONTROLLER。二 内核与网络栈参数优化
/etc/sysctl.d/99-kafka-network.conf):# 提高TCP缓冲区下限/上限(按内存与带宽酌情调整)
net.core.rmem_default = 134217728
net.core.wmem_default = 134217728
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
# 增加未完成连接与已建立连接队列
net.ipv4.tcp_max_syn_backlog = 4096
net.core.netdev_max_backlog = 5000
# 启用TCP快速打开(短连接/微服务友好)
net.ipv4.tcp_fastopen = 3
# 缩短TIME_WAIT回收,降低端口占用(仅在NAT/短连接场景谨慎开启)
net.ipv4.tcp_tw_reuse = 1
# 可选:启用BBR拥塞控制(需内核支持)
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
应用:sudo sysctl -p /etc/sysctl.d/99-kafka-network.conf。/etc/security/limits.d/99-kafka.conf):* soft nofile 100000
* hard nofile 100000
root soft nofile 100000
root hard nofile 100000
重新登录或在 systemd 服务中设置 LimitNOFILE=100000。# 查看网卡队列数
ethtool -l eth0
# 开启RPS(示例将16个接收队列映射到32个CPU)
echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus
echo 32768 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt
# 对多队列重复以上命令(rx-1..rx-N)
提示:RFS 需要 CONFIG_RPS 内核选项;容器/虚拟化环境需确认 vCPU 绑定与队列映射。三 Kafka关键网络参数建议
batch.size=131072..1048576(128KB–1MB,默认 16KB)linger.ms=50..100(允许适度攒批)compression.type=snappy 或 lz4(通常较 gzip 更低开销)acks=1(高吞吐场景,权衡可靠性)num.partitions 为 Broker 数的整数倍;replication.factor=3num.network.threads=8(万兆网卡可上调)、num.io.threads=16+log.segment.bytes=1073741824(1GB)、log.retention.hours=168fetch.min.bytes=1048576(1MB)max.poll.records=1000socket.send.buffer.bytes、socket.receive.buffer.bytesmax.connections,并复用连接/使用连接池四 验证与监控
ping <broker_ip>、traceroute <broker_ip>ss -lntp | grep :9092、netstat -s | grep -i listen(监听与丢包统计)ethtool -S eth0 | egrep 'rx_packets|tx_packets|rx_errors|tx_errors'(网卡层面错包)iperf3 -c <broker_ip> -P 4(多并发压测)ping -c 100 <broker_ip>(RTT 分布)./bin/kafka-producer-perf-test.sh --topic test --num-records 1000000 --record-size 1024 --throughput -1 --producer-props bootstrap.servers=<IP>:9092 compression.type=lz4 batch.size=1048576 linger.ms=50./bin/kafka-consumer-perf-test.sh --topic test --messages 1000000 --broker-list <IP>:9092 --fetch-size 1048576五 常见网络问题与排查要点
listeners 与 advertised.listeners 是否为客户端可达地址;跨机房/公网需使用 公网IP 或 域名,内网直连使用 内网IP;检查 安全组/防火墙 与云厂商 NACL。mtu=9000 需端到端一致)、中断绑定与 RPS/RFS 配置;观察 netstat -s 与 ethtool -S 错误计数。