Kafka在Ubuntu上的网络优化策略
ufw
)允许Kafka使用的端口(默认9092
),执行sudo ufw allow 9092
放行端口;若使用多网卡,需开放所有节点对应端口,保障节点间通信。server.properties
文件,设置listeners=PLAINTEXT://0.0.0.0:9092
(绑定所有接口)或特定IP(如PLAINTEXT://your_static_ip:9092
);同时配置advertised.listeners
为外部可访问的地址(如集群内节点IP或负载均衡地址),确保客户端能正确连接。/etc/netplan/*.yaml
文件修改,如addresses: [192.168.1.100/24]
),避免DHCP导致IP变动,保障网络稳定性。ulimit -n 65536
临时设置,或修改/etc/security/limits.conf
(添加* soft nofile 65536; * hard nofile 65536
)永久生效,避免因文件描述符不足导致连接拒绝。/etc/sysctl.conf
中添加:net.core.somaxconn=32768
(增加TCP连接队列长度,避免连接堆积)、net.ipv4.tcp_max_syn_backlog=16384
(增加SYN队列长度,应对高并发连接请求)、net.ipv4.tcp_tw_reuse=1
(复用TIME-WAIT状态的连接,减少资源占用)。修改后执行sysctl -p
使配置生效。num.network.threads
(处理网络请求的线程数)建议设置为CPU核心数的50%-75%(如8核CPU设为6);num.io.threads
(处理磁盘I/O的线程数)建议设置为CPU核心数的1-1.5倍(如8核CPU设为12),确保网络请求和磁盘写入的高效处理。socket.send.buffer.bytes
(发送缓冲区)和socket.receive.buffer.bytes
(接收缓冲区)建议设置为1MB(默认100KB),可根据网络带宽调整(如万兆网卡可设为2MB)。log.segment.bytes
(单个日志分段大小)建议设置为1GB(默认1GB,无需修改);log.retention.hours
(日志保留时间)设置为168小时(7天),自动清理过期数据,避免磁盘空间耗尽。batch.size
(批量大小)从默认16KB提升至128KB-1MB(根据消息大小调整),linger.ms
(等待时间)设置为50-100ms(允许生产端积累更多消息后再发送),可显著提升吞吐量。启用压缩算法(compression.type
设为snappy
或lz4
),在保证压缩率(约50%)的同时,平衡CPU开销与网络带宽节省。acks=1
(仅Leader确认),牺牲少量可靠性换取吞吐量提升30%;强一致性场景使用acks=all
(所有ISR副本确认),但会增加网络延迟。fetch.min.bytes
(最小拉取字节数)设置为1MB(默认1字节),fetch.max.wait.ms
(最大等待时间)设置为1000ms(允许Consumer等待更多数据后再返回),可提升吞吐量40%。设置max.poll.records
(单次poll的最大消息数)为1000(根据消费能力调整),避免单次处理过多消息导致内存溢出。replication.factor=3
(3副本),保障数据高可用,但避免副本过多导致同步延迟。使用KRaft模式(取代ZooKeeper),降低元数据管理开销,提升集群性能和稳定性。kafka-producer-perf-test
(测试Producer吞吐量,如--topic test --num-records 1000000 --record-size 1000 --throughput 100000
)和kafka-consumer-perf-test
(测试Consumer吞吐量,如--topic test --bootstrap-server localhost:9092 --messages 1000000
),根据测试结果调整参数。UnderReplicatedPartitions
,需为0)、请求队列时间(RequestQueueTimeMs
,需小于10ms)、网络吞吐量(NetworkBytesInPerSec
/NetworkBytesOutPerSec
),及时发现网络瓶颈或故障。