要让CentOS上的Kafka配置更合理,需从硬件基础、操作系统优化、Broker核心配置、分区与副本策略、生产者/消费者调优、监控与维护六大维度综合调整,以下是具体方案:
vm.swappiness=1
(禁用swap,避免内存页交换导致性能骤降);vm.dirty_background_ratio=10
(后台刷脏页阈值)、vm.dirty_ratio=60
(强制刷脏页阈值),平衡I/O性能与系统响应。net.core.rmem_default=262144
、net.core.rmem_max=2097152
(接收缓冲区)、net.core.wmem_default=262144
、net.core.wmem_max=2097152
(发送缓冲区),提升网络吞吐。ulimit -n 65535
(增加每个进程可打开的文件数,避免Kafka因文件描述符耗尽无法启动)。noatime
选项(避免文件访问时间戳更新带来的额外I/O开销)。-Xms16G -Xmx16G
(初始与最大堆内存一致,避免频繁扩容);-XX:+UseG1GC
),并设置-XX:MaxGCPauseMillis=50
(目标最大GC暂停时间50ms)、-XX:G1HeapRegionSize=16M
(堆区域大小16MB),减少GC对吞吐的影响。log.segment.bytes=1G
(每段日志最大1GB,平衡磁盘I/O与消息检索效率);log.retention.hours=168
(保留7天)、log.retention.bytes=10737418240
(单分区最大10GB),避免磁盘空间耗尽。buffer.memory=32M
(生产者发送消息的缓冲区大小,根据服务器内存调整,建议为可用内存的5%-10%);log.flush.interval.messages=10000
(每处理1万条消息刷新一次)、log.flush.interval.ms=5000
(每5秒刷新一次),平衡数据可靠性与性能(建议测试环境验证,生产环境可适当调大)。replica.lag.time.max.ms=60000
(允许副本同步延迟1分钟)、unclean.leader.election.enable=false
(禁止非ISR副本成为Leader,避免数据丢失)。batch.size=1M
(每批发送1MB消息,减少网络请求次数)、linger.ms=100
(等待100ms再发送,合并小消息),提高吞吐量;compression.type=lz4
(使用LZ4压缩,减少网络传输与存储开销,吞吐量比gzip高2-3倍);acks=1
(Leader写入成功即返回,平衡延迟与可靠性;若需强一致则设为all)。fetch.min.bytes=1M
(每次拉取至少1MB消息)、fetch.max.wait.ms=1000
(最多等待1秒),减少网络往返次数;session.timeout.ms=30000
(会话超时30秒)、heartbeat.interval.ms=10000
(心跳间隔10秒),避免频繁重平衡;使用group.instance.id
(静态成员资格),减少短暂离线导致的重平衡。kafka-topics.sh
(查看分区与副本状态)、kafka-consumer-groups.sh
(查看消费者组消费进度)命令实时检查集群健康。kafka-log-dirs.sh
工具),避免磁盘空间不足;设置合理的log.retention.bytes
与log.retention.hours
,平衡数据保留需求与存储成本。