一、操作系统级网络配置优化
静态IP与网络接口配置
为Kafka服务器配置静态IP,避免DHCP变动导致网络不稳定。编辑Ubuntu的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 eth0验证。
操作系统内核参数调优
修改/etc/sysctl.conf优化TCP性能,提升网络吞吐量和响应速度:
net.core.rmem_max = 16777216 # 接收缓冲区最大值
net.core.wmem_max = 16777216 # 发送缓冲区最大值
net.ipv4.tcp_rmem = 4096 87380 16777216 # TCP接收缓冲区分段
net.ipv4.tcp_wmem = 4096 65536 16777216 # TCP发送缓冲区分段
net.ipv4.tcp_max_syn_backlog = 8192 # SYN队列长度
net.ipv4.tcp_congestion_control = cubic # 拥塞控制算法(适合高带宽网络)
net.core.somaxconn = 32768 # 监听队列最大长度
应用配置:sudo sysctl -p。
文件描述符限制调整
Kafka处理大量并发连接时需要足够的文件描述符。编辑/etc/security/limits.conf,添加以下内容:
* soft nofile 65536 # 软限制
* hard nofile 65536 # 硬限制
同时,在/etc/pam.d/common-session和/etc/pam.d/common-session-noninteractive中添加:
session required pam_limits.so
重新登录或重启服务器使配置生效。
二、Kafka Broker核心配置优化
Listener与Advertisement配置
正确设置listeners(Broker监听的地址)和advertised.listeners(客户端连接的地址),避免客户端无法访问。例如:
listeners=PLAINTEXT://0.0.0.0:9092 # 监听所有接口(生产环境建议指定具体IP)
advertised.listeners=PLAINTEXT://your_public_ip:9092 # 替换为客户端可访问的IP/域名
若使用多网卡或多环境(如混合云),可通过advertised.listeners区分不同场景的访问地址。
网络线程与IO线程优化
num.network.threads:处理网络请求的线程数,建议设置为CPU核心数的50%-75%(如8核CPU设置为4-6)。num.io.threads:处理磁盘IO的线程数,建议设置为CPU核心数的1-2倍(如8核CPU设置为8-16)。Socket缓冲区调整
增大socket.send.buffer.bytes(发送缓冲区)和socket.receive.buffer.bytes(接收缓冲区)的大小,提升网络传输效率:
socket.send.buffer.bytes=1048576 # 1MB
socket.receive.buffer.bytes=1048576 # 1MB
若网络带宽较高(如10Gbps),可适当增大至2MB。
请求大小限制
调整socket.request.max.bytes控制单个请求的最大大小,避免过大请求导致Broker崩溃:
socket.request.max.bytes=104857600 # 100MB(默认10MB,可根据消息大小调整)
需与客户端的max.request.size参数保持一致。
三、Kafka Producer/Consumer配置优化
Producer批量处理与压缩
batch.size:增大批处理大小,减少网络请求次数(如1MB):batch.size=1048576 # 1MB
linger.ms:增加等待时间,让更多的消息加入当前批次(如100ms):linger.ms=100
compression.type:启用压缩(如snappy或lz4),减少网络带宽消耗:compression.type=snappy
注意:压缩会增加CPU开销,需根据业务场景权衡。Consumer拉取策略优化
fetch.min.bytes:增大单次拉取的最小字节数(如1MB),减少拉取次数:fetch.min.bytes=1048576 # 1MB
fetch.max.wait.ms:增加拉取等待时间(如1000ms),配合fetch.min.bytes提高吞吐量:fetch.max.wait.ms=1000
max.poll.records:控制每次poll返回的最大消息数(如500),避免单次处理过多消息导致内存溢出:max.poll.records=500
四、系统级辅助优化
关闭SELinux(内网环境)
若Kafka部署在内网且无需严格安全隔离,可关闭SELinux以减少安全策略对网络性能的影响:
sudo setenforce 0 # 临时关闭
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 永久关闭
防火墙配置
开放Kafka使用的端口(如9092),允许客户端访问:
sudo ufw allow 9092/tcp # 使用ufw防火墙
若使用iptables,添加规则:
sudo iptables -A INPUT -p tcp --dport 9092 -j ACCEPT
sudo service iptables save