Kafka在CentOS上的调优配置指南
ulimit -n 65535
临时设置,修改/etc/security/limits.conf
永久生效(添加* soft nofile 65535; * hard nofile 65535
)。vm.swappiness=1
(默认60),避免系统将内存页交换到磁盘(严重影响性能)。vm.dirty_background_ratio=10
(后台刷新脏页的阈值)、vm.dirty_ratio=60
(强制刷新脏页的阈值),平衡I/O性能与系统响应速度。fs.aio-max-nr=1048576
(增加异步I/O操作数),提升磁盘并发写入能力。net.core.rmem_default=262144
、net.core.wmem_default=262144
、net.ipv4.tcp_wmem="4096 16384 131072"
、net.ipv4.tcp_rmem="4096 65536 1048576"
),优化网络传输效率。noatime
选项(避免频繁更新文件访问时间戳,减少磁盘I/O)。num.partitions
(分区数)需与消费者线程数基本相等(如每个消费者线程处理1个分区),提高并行处理能力;分区数过多会增加管理复杂度,需根据业务需求平衡。num.io.threads
(磁盘I/O线程数):设置为CPU核心数的2倍(如8核CPU设置为16),负责消息写入磁盘。num.replica.fetchers
(副本拉取线程数):设置为CPU核心数的1/3(如8核CPU设置为3),提升副本同步效率。num.network.threads
(网络请求线程数):设置为CPU核心数的1.5倍(如8核CPU设置为12),处理客户端请求。compression.type
(压缩类型)选择lz4
(兼顾吞吐量与CPU开销,比gzip更快、比snappy更节省空间),减少网络传输和存储成本。batch.size
(批量发送大小)设置为1MB(默认16KB),减少网络请求次数;linger.ms
(批量发送延迟)设置为100ms以上(如200ms),在延迟与吞吐量间取得平衡。log.segment.bytes
(日志段大小)设置为1GB(默认1GB),平衡磁盘I/O(大分段减少切换次数)与数据清理效率(大分段清理耗时更长)。acks
(应答级别)根据业务需求选择:
acks=1
(默认):Leader写入成功即返回,兼顾性能与可靠性。acks=all
:所有ISR副本写入成功才返回,适合高可靠性场景(如金融数据)。buffer.memory
(生产者缓冲区)设置为64MB以上(默认32MB),避免生产者因缓冲区满而阻塞。batch.size
(批量大小)设置为1MB(默认16KB),linger.ms
(延迟)设置为100ms以上(如200ms),合并小消息减少网络请求。compression.type
设置为lz4
(推荐),降低网络传输和存储开销。acks
根据业务需求选择(1
或all
),平衡性能与可靠性。buffer.memory
设置为64MB以上(默认32MB),避免生产者阻塞。fetch.min.bytes
(最小拉取字节数)设置为1MB(默认1字节),fetch.max.wait.ms
(最大等待时间)设置为1000ms(默认500ms),减少网络请求次数。max.poll.records
(每次poll的最大记录数)设置为500以上(默认500),提高单次poll的吞吐量。session.timeout.ms
(会话超时)设置为30s以上(默认10s),heartbeat.interval.ms
(心跳间隔)设置为10s以下(默认3s),避免频繁重平衡(重平衡会导致消费暂停)。kafka-topics --describe --topic <topic_name>
命令查看ISR(In-Sync Replicas)数量,确保ISR副本数≥2(避免因副本滞后导致数据丢失)。replica.lag.time.max.ms
(副本同步时间阈值)设置为60000ms(1分钟,默认10秒),允许副本在一定时间内滞后,减少不必要的同步开销。unclean.leader.election.enable
设置为false
(默认),避免非ISR副本成为Leader(防止数据丢失),仅在可接受少量数据丢失时设置为true
。session.timeout.ms
设置为30s以上,heartbeat.interval.ms
设置为10s以下,确保消费者及时发送心跳,避免误判为离线。group.instance.id
(静态成员ID),避免消费者短暂离线(如重启)触发重平衡,减少消费中断时间。log.retention.hours
或log.retention.bytes
),定期清理旧日志(如保留7天),避免磁盘空间耗尽。