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模拟高并发场景),评估优化效果并调整配置。