Linux环境下Kafka性能调优技巧
noatime选项(禁用文件访问时间更新,减少磁盘写操作)。ulimit -n 65535命令临时设置,永久生效需修改/etc/security/limits.conf(如kafka soft nofile 65535; kafka hard nofile 65535)。net.core.rmem_max=16777216、net.core.wmem_max=16777216),调整TCP内存分配策略(net.ipv4.tcp_rmem="4096 87380 16777216"、net.ipv4.tcp_wmem="4096 65536 16777216"),优化连接队列(net.core.somaxconn=32768、net.ipv4.tcp_max_syn_backlog=8192),减少网络延迟。-Xms(初始堆)与-Xmx(最大堆)为相同值(如-Xms8g -Xmx8g),减少动态扩展开销。-XX:+UseG1GC),针对大内存堆优化,避免CMS的并发模式失败问题。可调整-XX:MaxGCPauseMillis=200(目标最大GC停顿时间,单位毫秒)、-XX:InitiatingHeapOccupancyPercent=45(触发并发GC的堆占用率阈值)。num.partitions)提升并行处理能力(分区数应大于等于消费者数量),但避免过度分区(会增加ZooKeeper管理开销);设置合理副本因子(default.replication.factor=3),确保数据高可用(需与集群Broker数量匹配,避免脑裂)。log.flush.interval.messages=10000、log.flush.interval.ms=1000),平衡性能与数据安全性(频繁刷新会增加磁盘I/O,但减少数据丢失风险);设置日志段大小(log.segment.bytes=1g),避免单个日志文件过大导致恢复变慢;选择日志清理策略(log.cleanup.policy=delete(默认,按时间/大小删除)或compact(针对Key的压缩,适合变更日志场景))。num.network.threads,默认3,可根据CPU核心数调整为4~8),处理网络请求;增加IO线程数(num.io.threads,默认8,建议设置为CPU核心数的1~2倍),处理磁盘读写;增大Socket缓冲区(socket.send.buffer.bytes=102400、socket.receive.buffer.bytes=102400),提高网络传输效率;设置最大请求大小(socket.request.max.bytes=100m),防止过大请求导致Broker崩溃。compression.type=gzip(高压缩比,但CPU消耗大)、snappy(低延迟,压缩比适中)、lz4(平衡压缩比与速度)),减少网络传输和存储开销(对带宽敏感场景效果显著)。iperf工具测试网络带宽)。kafka-log-dirs目录下的旧日志),释放磁盘空间;开启Kafka日志压缩功能(log.cleanup.policy=compact),减少日志文件大小。kafka-producer-perf-test和kafka-consumer-perf-test工具,或JMeter、Gatling等第三方工具进行压力测试,模拟高并发场景,验证调优效果(如调整分区数、批量大小后的吞吐量变化)。