Kafka在CentOS上的存储优化策略
log.dirs
参数配置多个路径(如/data/kafka-logs-1,/data/kafka-logs-2
),Kafka会自动均衡数据分布,提升磁盘利用率。noatime
选项(如mount -o noatime /dev/sdb1 /data/kafka-logs
),避免频繁更新文件访问时间,减少磁盘I/O开销。vm.swappiness=1
(默认60),降低系统使用Swap的概率,确保Kafka优先使用物理内存;vm.dirty_background_ratio=10
(后台刷新阈值)、vm.dirty_ratio=20
(强制刷新阈值),平衡内存与磁盘I/O负载;vm.max_map_count=262144
(默认65530),避免Kafka因内存映射区域不足而报错。ulimit -n 65535
(临时)或修改/etc/security/limits.conf
(永久)增加文件描述符限制,满足Kafka大量文件(日志段、索引文件)的打开需求。log.segment.bytes
(默认1GB),增大该值可减少日志段数量(如设置为2GB),降低Kafka维护索引文件的开销;结合log.retention.hours
(默认168小时)设置合理的日志保留时间,定期清理过期数据,释放磁盘空间。log.cleaner.enable=true
(默认false),对过期或重复数据进行压缩清理(仅适用于有副本的主题),减少存储占用。compression.type=lz4
(默认none),LZ4算法在压缩率(约2-3倍)和CPU开销间取得较好平衡,可显著减少网络传输和磁盘写入量。batch.size
(默认16KB,建议调整为32KB-128KB),延长linger.ms
(默认0,建议调整为10-100ms),让生产者积累更多消息后批量发送,提升吞吐量;fetch.max.bytes
(默认50MB,建议调整为100MB-200MB)、max.poll.records
(默认500,建议调整为1000-2000),减少消费者拉取次数,提高消费效率。num.replica.fetchers=2
(默认1),增加副本同步线程数,加快副本数据同步速度;谨慎设置unclean.leader.election.enable=false
(默认true),避免非ISR副本成为Leader导致数据丢失,权衡可靠性与可用性。UnderReplicatedPartitions
(未同步分区数)、BytesInPerSec
(每秒输入字节数)、BytesOutPerSec
(每秒输出字节数)),或通过Prometheus+Grafana搭建可视化监控面板,实时掌握集群状态。kafka-log-dirs.sh --bootstrap-server localhost:9092 --describe
命令检查日志段大小和保留时间,确保log.retention.hours
设置生效;使用kafka-cleaner.sh
工具手动触发日志清理(如测试环境)。