一、Ubuntu系统级网络配置
静态IP设置
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。
防火墙放行端口
Kafka默认使用9092端口(生产端)、9093端口(SSL)、2181端口(ZooKeeper),需通过UFW开放:
sudo ufw allow 9092/tcp # 生产端默认端口
sudo ufw allow 2181/tcp # ZooKeeper默认端口
sudo ufw reload # 重新加载防火墙规则
若使用iptables,需添加规则并保存:
sudo iptables -A INPUT -p tcp --dport 9092 -j ACCEPT
sudo service iptables save
```。
二、Kafka Broker核心网络参数优化
Listeners与Advertised.Listeners配置
listeners:定义Broker监听的地址和端口,若需允许远程访问,需绑定具体IP(如PLAINTEXT://192.168.1.100:9092);若仅在本地测试,可使用0.0.0.0(不推荐生产)。advertised.listeners:客户端实际连接的地址,需填写外部可访问的IP或域名(如PLAINTEXT://your-domain.com:9092)。server.properties):listeners=PLAINTEXT://192.168.1.100:9092
advertised.listeners=PLAINTEXT://your-domain.com:9092
```。
TCP参数调优
修改Kafka的TCP缓冲区大小,提升网络吞吐能力:
socket.send.buffer.bytes=102400 # 发送缓冲区(默认100KB,可根据带宽调整至1MB)
socket.receive.buffer.bytes=102400 # 接收缓冲区(默认100KB,调整为1MB)
socket.keepalive.enable=true # 开启TCP keepalive,检测死连接
```。
三、Kafka生产端与消费端优化
生产端优化
batch.size(默认16KB,建议128KB-1MB),减少网络请求次数;设置linger.ms(默认0,建议50-100ms),允许生产端积累更多消息后批量发送。compression.type(如snappy或lz4),压缩率约30%-50%,显著减少网络传输量(gzip压缩率高但CPU开销大,不推荐高吞吐场景)。acks=1(仅Leader确认),牺牲少量可靠性换取吞吐量提升(acks=all可靠性最高,但延迟高)。batch.size=131072 # 128KB
linger.ms=50
compression.type=snappy
acks=1
```。
消费端优化
fetch.min.bytes(默认1B,建议1MB),减少拉取频率;max.poll.records(默认500,建议1000),单次拉取更多消息,降低处理开销。enable.auto.commit=true),并设置auto.commit.interval.ms=5000(5秒),平衡数据一致性与性能。fetch.min.bytes=1048576 # 1MB
max.poll.records=1000
enable.auto.commit=true
auto.commit.interval.ms=5000
```。
四、操作系统内核参数优化
/etc/sysctl.conf,添加以下参数(提升TCP吞吐与连接处理能力):net.core.netdev_max_backlog=5000 # 网卡接收队列长度(默认1000,高并发场景需增加)
net.core.somaxconn=32768 # 监听队列最大长度(默认128,需大于Kafka的backlog)
net.ipv4.tcp_max_syn_backlog=8192 # SYN队列长度(默认1024,高并发场景需增加)
net.ipv4.tcp_tw_reuse=1 # 复用TIME-WAIT连接(减少连接建立开销)
net.ipv4.tcp_fin_timeout=30 # TIME-WAIT超时时间(默认60秒,缩短至30秒)
应用配置:sudo sysctl -p。五、网络硬件与架构优化
使用高性能网卡
优先选择万兆网卡(或更高),提升网络带宽(千兆网卡易成为瓶颈),减少消息传输延迟。
启用零拷贝技术
Kafka默认使用sendfile系统调用,将数据从页缓存直接发送到网卡,减少4次数据拷贝(磁盘→内核→用户→内核→网卡),提升吞吐量约2倍。
顺序I/O与页缓存
Kafka依赖顺序写入磁盘(比随机写入快4-5倍),需确保磁盘为顺序I/O优化(如NVMe SSD);同时利用Linux页缓存(Page Cache),将热点数据缓存在内存,减少直接磁盘读操作。