Ubuntu环境下Kafka性能优化策略
num.partitions需与消费者线程数基本相等,确保并行处理能力最大化;num.io.threads建议设置为CPU总核心数的50%(如8核CPU设为4),负责磁盘I/O操作;num.network.threads设置为CPU核心数的50%×2/3(如8核设为5-6),处理网络请求;num.replica.fetchers设为CPU核心数的50%×1/3(如8核设为2-3),加速副本同步。log.segment.bytes调整为1GB(默认1GB,可根据磁盘容量优化),控制日志分段大小以提升滚动效率;log.retention.hours根据业务需求设置(如72小时),避免磁盘空间过度占用;compression.type启用LZ4压缩(兼顾吞吐量与CPU开销,比GZIP更高效),减少网络传输和存储成本。acks设置为all(确保数据写入所有ISR副本,可靠性最高),若对可靠性要求较低可设为1(仅Leader确认),提升吞吐量但增加数据丢失风险。batch.size设置为1MB(默认16KB),合并多条消息为批次发送,显著提升吞吐量;linger.ms设置为100ms以上(默认0),让Producer等待更多消息进入批次,平衡延迟与吞吐量(如设为100-200ms)。buffer.memory设置为64MB以上(默认32MB),增加内存缓冲区避免因缓冲区满导致的阻塞;compression.type采用LZ4压缩(比Snappy更高效,比GZIP更省CPU),减少网络带宽占用。fetch.min.bytes设置为1MB(默认1B),要求Broker累积足够数据后再返回,减少网络请求次数;fetch.max.wait.ms设置为1000ms(默认500ms),配合fetch.min.bytes平衡延迟与吞吐量;max.poll.records根据消费能力设置(如1000条/次),控制每次poll的最大消息数,避免单次处理过载。ulimit -n 65535命令增加文件描述符限制(默认1024),避免大量连接导致资源耗尽;调整TCP参数:net.core.somaxconn(设为1024,增加监听队列长度)、net.ipv4.tcp_max_syn_backlog(设为8192,提升SYN请求处理能力)、net.ipv4.tcp_tw_reuse(设为1,复用TIME_WAIT连接),优化网络性能。noatime选项(禁用访问时间更新),减少磁盘写操作。-Xmx和-Xms为相同值(如4GB),避免堆内存动态调整带来的性能损耗;选择G1垃圾收集器(-XX:+UseG1GC),适合大内存场景,减少Full GC停顿时间;调整堆内存大小(根据Broker负载,一般建议为物理内存的1/4-1/2)。log.retention.hours),定期清理过期日志;及时升级Kafka版本(修复已知bug、提升性能),确保集群稳定性。