1. 调整日志保留策略
通过合理配置日志保留参数,避免磁盘空间被无用数据长期占用。主要参数包括:
delete(按时间/大小删除),可保留为compact(针对key的压缩,适用于变更日志场景)。这些参数需在server.properties中配置,能有效控制日志文件的存储规模。2. 启用消息压缩
通过压缩减少消息存储空间和网络传输开销。Kafka支持多种压缩算法,优先选择Zstd(高压缩比,约3-10倍;合理压缩速度)或Lz4(平衡压缩比与速度)。配置项为producer.properties中的compression.type(设为zstd/lz4),生产者发送消息时会自动压缩,broker存储和解压后传递给消费者,不影响消费逻辑。
3. 优化日志段管理
Kafka通过日志段(Log Segment)管理数据,合理配置日志段大小和滚动策略可提升存储效率:
.index文件),提升查找效率;server.properties中调整,平衡存储粒度与I/O性能。4. 合理设置分区数
分区数影响并行处理能力和存储分布:
5. 硬件升级(使用SSD)
将Kafka日志目录(log.dirs)指向SSD,显著提升磁盘I/O性能(顺序写入速度可达500MB/s以上),减少因磁盘瓶颈导致的存储压力。同时,增加内存(如32GB以上)可提升页缓存利用率,减少磁盘读取次数。
6. 监控与定期清理
kafka-delete-records.sh脚本定期清理过期日志(如每月一次),或配置log.cleanup.policy=compact对key进行压缩(适用于变更日志场景),释放存储空间。7. 优化生产者与消费者配置
batch.size(如1MB)和linger.ms(如100ms),批量发送消息减少网络请求和磁盘写入次数;启用压缩(compression.type=zstd)进一步减少传输和存储开销;fetch.min.bytes(如1MB)和fetch.max.wait.ms(如500ms),批量拉取消息提升吞吐量;调整max.poll.records(如10000条),避免单次拉取过多数据导致内存溢出。