Kafka在Linux下的存储配置及优化
log.dirs
:指定Kafka日志文件的存储目录(如/var/lib/kafka/data
或/data/kafka
)。建议使用多块磁盘时用逗号分隔(如/disk1/kafka,/disk2/kafka
),以提升并行I/O性能。该参数是Kafka存储的基础路径,直接影响数据存放位置。
log.segment.bytes
设置单个日志段的最大字节数(默认1GB,即1073741824
字节)。较大的段大小可减少分段数量及索引开销,适合高吞吐场景;较小的段大小便于快速清理过期数据,但会增加索引维护成本。log.segment.ms
设置日志段的滚动时间(默认7天,即604800000
毫秒)。当日志段达到指定时间或大小时,会自动滚动生成新段,配合保留策略清理旧数据。log.retention.hours
设置消息在磁盘上的保留小时数(默认168小时,即7天)。超过该时间的消息会被自动删除,适合有固定数据保留周期的业务(如7天日志留存)。log.retention.bytes
设置每个分区的最大日志文件总大小(默认无限制)。当日志文件达到该大小时,会删除最旧的消息,适合控制单分区数据量的场景(如分区数据量上限为10GB)。.index
(消息偏移量索引)和.timeindex
(时间戳索引)文件。通过log.index.size.max.bytes
(默认10MB)和log.timeindex.size.max.bytes
(默认1GB)调整索引文件大小,较大的索引文件可减少索引查找次数,但会增加内存占用。log.flush.interval.messages
:每累计指定条消息(默认10000条)强制刷盘一次,确保数据持久化,但频繁刷盘会影响I/O性能。log.flush.interval.ms
:每经过指定时间(默认1000毫秒)强制刷盘一次,平衡数据安全性与I/O性能。log.flush.scheduler.interval.ms
:检查刷盘的间隔时间(默认3000毫秒),优化刷盘调度效率。default.replication.factor
设置每个分区的副本数(生产环境建议2-3)。副本数越多,数据可靠性越高,但会增加写入同步开销(如3副本比1副本写入延迟高)。min.insync.replicas
设置ISR(与Leader保持同步的副本)的最小数量(生产环境建议1-2)。当ISR数量低于该值时,Broker会停止接受写入请求,避免数据不一致。/etc/fstab
中添加noatime,nodiratime
选项(禁用访问时间更新),减少文件系统元数据操作,提升I/O性能。ulimit -n 100000
命令或/etc/security/limits.conf
文件,将Kafka进程的文件描述符限制设置为10万以上(每个分区需要至少一个文件描述符),避免因文件描述符不足导致服务中断。/etc/sysctl.conf
中的TCP缓冲区大小(如net.core.wmem_default=16777216
、net.core.rmem_default=16777216
),提升网络传输效率,适应高吞吐场景。