Kafka在CentOS上的性能调优策略
vm.dirty_ratio和vm.dirty_background_ratio调整脏页刷新策略)。noatime选项(禁用访问时间更新,减少文件系统写操作)。vm.swappiness=1(甚至0,若内存充足),避免频繁swap操作(swap会严重影响性能)。vm.dirty_background_ratio=5、vm.dirty_ratio=10,平衡脏页刷新频率与系统响应时间(避免频繁刷盘导致I/O瓶颈)。fs.file-max=65535(系统最大文件描述符数)、ulimit -n 65535(用户级文件描述符限制),满足Kafka大量连接的需求。net.core.somaxconn=32768(TCP连接队列长度)、net.ipv4.tcp_max_syn_backlog=16384(SYN队列长度),避免连接堆积。num.network.threads:设置为CPU逻辑核数的2倍(如16核设置为32),处理客户端网络请求。num.io.threads:设置为磁盘数量的8倍(如4块SSD设置为32),处理磁盘I/O操作(写入、读取日志)。num.replica.fetchers:设置为CPU逻辑核数的1/4(如16核设置为4),加速副本同步(避免副本滞后)。num.partitions:根据预期吞吐量和消费者线程数设置(公式:分区数=max(预期吞吐量/单分区TPS, 消费者线程数*2)),增加分区数能提升并行处理能力(如某金融平台设置128分区,峰值TPS达180万)。default.replication.factor:强一致性场景(如金融)设置为3(跨AZ部署),允许短暂数据丢失的场景设置为2(降低成本)。log.segment.bytes:设置为1GB(默认1GB),减少日志段文件数量(便于管理和清理)。log.flush.interval.messages:SSD设置为10000条(默认1000条),HDD设置为3000条(平衡数据持久性与性能)。log.flush.interval.ms:SSD设置为1000ms(默认1000ms),HDD设置为3000ms(减少刷盘次数)。compression.type设置为lz4(兼顾压缩率与CPU开销,比Snappy略高但吞吐量更好),减少网络传输和存储开销。batch.size设置为1MB(默认16KB),linger.ms设置为20ms(默认0ms),让生产者积累更多消息后再批量发送,减少网络请求次数(提升吞吐量约30%)。compression.type设置为lz4(比Snappy更高效),进一步减少网络传输量(吞吐量可提升20%-30%)。buffer.memory设置为32MB(默认32MB),应对高并发场景(避免生产者因缓冲区满而阻塞)。acks根据业务需求设置:
acks=1(默认):Leader写入成功即返回(平衡可靠性与性能)。acks=all:所有ISR副本写入成功才返回(强一致性,适合金融场景)。acks=0:不等待应答(最高吞吐量,但可能丢失数据)。fetch.min.bytes设置为1MB(默认1B),fetch.max.wait.ms设置为1000ms(默认500ms),让消费者一次性拉取更多数据,减少网络请求次数(提升吞吐量)。max.partition.fetch.bytes设置为2MB(默认1MB),允许单分区拉取更多数据(避免因单分区数据量大而阻塞)。max.poll.records设置为500(默认500),控制单次poll返回的记录数(避免单次处理过多导致延迟)。consumer_lag),若延迟超过阈值(如1000条),动态调整fetch.min.bytes(增大)或max.poll.records(减小),缓解消费压力。-Xms(初始堆)和-Xmx(最大堆)为相同值(如4GB),避免堆内存动态扩展带来的性能开销(如-Xms4G -Xmx4G)。-XX:+UseG1GC),适合大内存场景(比CMS更高效),减少Full GC次数(降低停顿时间)。-XX:MaxGCPauseMillis=200(目标最大GC停顿时间,单位ms)、-XX:InitiatingHeapOccupancyPercent=35(触发并发GC的堆占用率,避免过早GC)。log.retention.hours=168(保留7天)、log.retention.bytes=1073741824(保留1GB),定期清理旧日志(避免磁盘空间耗尽)。kafka-producer-perf-test和kafka-consumer-perf-test工具定期进行压力测试(如模拟峰值吞吐量),验证调优效果并根据结果调整参数。