Linux下Kafka性能优化策略
noatime
选项(禁用文件访问时间更新,减少不必要的磁盘写操作)。vm.swappiness
(建议设为10以下,减少内存交换)、vm.dirty_background_ratio
(后台脏页刷新阈值,建议设为5-10%)、vm.dirty_ratio
(前台脏页刷新阈值,建议设为10-20%),优化内存与磁盘I/O平衡。ulimit -n 65535
命令临时提高Kafka进程可打开的文件描述符数量(生产环境需写入/etc/security/limits.conf
永久生效),避免因连接数过多导致服务拒绝。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"
),提升网络吞吐量。num.network.threads
(处理网络请求,建议为CPU核心数的1-2倍,如8核设为8-16);根据磁盘数量设置num.io.threads
(处理磁盘I/O,建议为磁盘数量的1-2倍,如4块磁盘设为4-8),避免线程成为瓶颈。log.segment.bytes
(单个日志段大小,建议128MB-512MB,过大导致日志切换慢,过小增加元数据开销);log.retention.hours
(日志保留时间,根据业务需求设为1-7天,避免磁盘空间过度占用);log.flush.interval.messages
(批量刷盘的消息数,建议10000-50000)和log.flush.interval.ms
(批量刷盘的时间间隔,建议1000-5000ms),平衡数据持久性与性能。num.partitions
(主题分区数,需大于消费者数量且随集群规模增长调整,如10个消费者设为10-20),提高并行处理能力;设置default.replication.factor=3
(默认副本因子,确保数据高可用,避免单点故障)。batch.size
(批量发送的消息字节数,建议1MB-10MB,增大减少网络请求);linger.ms
(发送前等待时间,建议10-100ms,允许更多消息填充批次);compression.type
(压缩算法,推荐lz4
或snappy
,减少网络传输和存储开销,但会增加少量CPU负载)。-Xms
(初始堆)与-Xmx
(最大堆)为相同值(避免动态扩展带来的停顿),如-Xms8g -Xmx8g
。-XX:+UseG1GC
;调整-XX:MaxGCPauseMillis=200
(目标最大GC停顿时间,建议200ms以内)、-XX:InitiatingHeapOccupancyPercent=45
(触发并发GC的堆占用率,建议45%左右),优化GC性能。server.log
、controller.log
),及时发现异常(如Broker宕机、副本不同步);设置日志清理策略(如按时间或大小清理旧日志),避免磁盘空间耗尽;定期进行性能测试(如使用JMeter、Gatling模拟高并发场景),评估优化效果并调整配置。