kafka日志清理策略
简述
Kafka是一个基于日志的流处理平台,一个topic可以有多个分区(partition),分区是复制的基本单元,在单节点上,一个分区的数据文件可以存储在多个磁盘目录中,配置项是:
# A comma separated list of directories under which to store log files
log.dirs=/disk1/kafka,/disk2/kafka,/disk3/kafka,/disk4/kafka,/disk5/kafka,/disk6/kafka,/disk7/kafka,/disk8/kafka,/disk9/kafka,/disk10/kafka,/disk11/kafka,/disk12/kafka
每个分区的日志文件存储的时候又会分成一个个的segment,默认日志段(segment)的大小是1GB,segment是日志清理的基本单元,当前正在使用的segment是不会被清理的。
# The maximum size of a log segment file. When this size is reached a new log segment will be created.
log.segment.bytes=1073741824 #1GB
日志清理
Kafka提供了日志删除(delete)和日志压缩(compact)两种清理日志的策略,可以通过参数cleanup.policy为每个主题指定不同的清理策略,也可以在代理启动时通过配置项log.cleanup.policy指定日志清理策略,这样该代理上的所有分区日志清理默认使用该配置设置的策略,主题级别的策略设置会覆盖代理级别的配置。
基于时间的删除策略
在server.properity文件中设置如下:
log.retention.hours=48
log.retention.check.interval.ms=300000
log.segment.bytes=1073741824
每个segment的大小为1GB,每5分钟检查一次是否有segment已经查过了48h,如果有将其标记为deleted。
基于文件大小的删除策略
在server.properity文件中设置:
log.retention.bytes(原来写的是log.segment.bytes)参数默认没有指定。
你可以同时指定log.retention.bytes和log.retention.hours来混合指定保留规则。一旦日志的大小超过了log.retention.bytes就清除老的segment,一旦某个segment的保留时间超过了规定的值同样将其清除。
删除逻辑是:首先计算日志段总大小与retention.bytes之间的差值(diff),得到需要删除的日志总大小,然后从第一个日志段开始查找,若diff与该日志段字节之差不小于0,则将该日志段加入到待删除集合中,以此类推,直到diff与查找的日志段大小之差小于0,查找结束,迭代待删除的日志段文件,进行物理删除。
参考资料:
https://mp.weixin.qq.com/s/7f5iUVYtxxZEYRPFybHW5A
https://mp.weixin.qq.com/s/PoON2wPw3xyflhRH1NBd-g
相关文章
- 直接在代码里面对list集合进行分页
- .NET Framework 4.5新特性详解
- 大数据的简要介绍
- 大数据的由来
- 高斯混合模型的自然梯度变量推理
- timing-wheel 仿Kafka实现的时间轮算法
- 使用Navicat软件连接自建数据库(Linux系统)
- 那一天,我被Redis主从架构支配的恐惧
- Redis 深入了解键的过期时间
- C#使用委托调用实现用户端等待闪屏
- 基于流计算 Oceanus 和 Elasticsearch Service 构建百亿级实时监控系统
- GRAND | 转录调控网络预测数据库
- JFreeChart API中文文档
- 临床相关突变查询数据库
- TIGER | 人类胰岛基因变化查询数据库
- 视频边缘计算网关EasyNVR在视频整体监控解决方案中的应用分析
- Apache Arrow - 大数据在数据湖后的下一个风向标
- 常见的电商数据指标体系
- AKShare-艺人数据-艺人流量价值
- MySQL中多表联合查询与子查询的这些区别,你可能不知道!