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工具手动触发日志清理(如测试环境)。