为确保Kafka网络稳定,需为Ubuntu服务器配置静态IP。编辑Netplan配置文件(如/etc/netplan/01-netcfg.yaml),修改为以下内容(替换为实际IP、网关、DNS):
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses: ["192.168.1.100/24"] # 静态IP及子网掩码
gateway4: "192.168.1.1" # 网关地址
nameservers:
addresses: ["8.8.8.8", "8.8.4.4"] # DNS服务器
应用配置:sudo netplan apply,并通过ip addr show验证。
Kafka默认使用9092端口(若修改需同步调整),允许客户端访问:
sudo ufw allow 9092/tcp
sudo ufw enable # 若未启用防火墙
num.network.threads控制网络请求处理的线程数,建议设置为CPU核心数的50%~75%(如8核服务器设为4~6);num.io.threads处理磁盘读写请求,建议设置为CPU核心数的1~1.5倍(如8核设为8~12)。增大发送/接收缓冲区,提升网络吞吐能力:
socket.send.buffer.bytes=102400 # 发送缓冲区(默认100KB,建议100KB~1MB)
socket.receive.buffer.bytes=102400 # 接收缓冲区(同上)
batch.size控制单个批次的最大字节数,增大可减少网络请求次数(建议128KB~1MB,默认16KB);linger.ms让Producer等待更多消息加入批次(建议50~100ms,默认0);compression.type使用Snappy或LZ4(平衡压缩率与CPU开销,压缩率约30%~50%)。高吞吐场景下,将acks设置为1(仅Leader确认),牺牲少量可靠性换取性能提升(约30%,默认为all)。
fetch.min.bytes设置单次拉取的最小字节数(建议1MB,默认1B),减少拉取频率;fetch.max.wait.ms当数据不足时,等待的最大时间(建议1000ms,默认500ms);max.poll.records设置单次poll的最大消息数(建议1000~5000,默认500),配合消费者线程数(等于分区数)提升并行度。调整内核参数,提升TCP网络性能:
# 增大连接队列长度(避免SYN洪水攻击导致连接失败)
sudo sysctl -w net.core.somaxconn=65535
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=65535
# 开启TCP时间戳(提升高延迟网络的性能)
sudo sysctl -w net.ipv4.tcp_timestamps=1
# 快速回收TIME_WAIT状态的连接(适用于高并发短连接场景)
sudo sysctl -w net.ipv4.tcp_tw_reuse=1
持久化配置:将上述命令添加到/etc/sysctl.conf,执行sudo sysctl -p生效。
Kafka需要处理大量并发连接,需增大文件描述符限制:
# 临时生效(重启失效)
ulimit -n 65536
# 永久生效:编辑/etc/security/limits.conf,添加以下内容
kafka_user soft nofile 65536
kafka_user hard nofile 65536
Kafka默认启用sendfile系统调用,将数据从页缓存直接发送到网卡,减少4次数据拷贝(磁盘→内核→用户→内核→网卡),提升吞吐量约2倍。
使用Prometheus+Grafana监控Kafka网络指标(如网络吞吐量、延迟、连接数),定期通过kafka-producer-perf-test和kafka-consumer-perf-test进行压测,验证优化效果。