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
工具定期进行压力测试(如模拟峰值吞吐量),验证调优效果并根据结果调整参数。