-
Kafka将数据持久化到了硬盘上,为了控制磁盘容量,需要对过去的消息进行清理
-
Kafka日志删除策略
- 内部有个定时任务检测删除日志,默认是5分钟 log.retention.check.interval.ms
- 支持配置策略对数据清理
- 根据segment单位进行定期清理
-
启用cleaner
- log.cleaner.enable=true
- log.cleaner.threads = 2 (清理线程数配置)
-
日志删除
- log.cleanup.policy=delete
#清理超过指定时间的消息,默认是168小时,7天,
#还有log.retention.ms, log.retention.minutes, log.retention.hours,优先级高到低
log.retention.hours=168
#超过指定大小后,删除旧的消息,下面是1G的字节数,-1就是没限制
log.retention.bytes=1073741824
还有基于日志起始位移(log start offset),未来社区还有更多
- 基于【时间删除】 日志说明
配置了7天后删除,那7天如何确定呢?
每个日志段文件都维护一个最大时间戳字段,每次日志段写入新的消息时,都会更新该字段
一个日志段segment写满了被切分之后,就不再接收任何新的消息,最大时间戳字段的值也将保持不变
kafka通过将当前时间与该最大时间戳字段进行比较,从而来判定是否过期
- 基于【大小超过阈值】 删除日志 说明
- log.retention.bytes和log.retention.minutes任意一个达到要求,都会执行删除
假设日志段大小是500MB,当前分区共有4个日志段文件,大小分别是500MB,500MB,500MB和10MB
10MB那个文件就是active日志段。
此时该分区总的日志大小是3*500MB+10MB=1500MB+10MB
如果阈值设置为1500MB,那么超出阈值的部分就是10MB,小于日志段大小500MB,故Kafka不会执行任何删除操作,即使总大小已经超过了阈值;
如果阈值设置为1000MB,那么超过阈值的部分就是500MB+10MB > 500MB,此时Kafka会删除最老的那个日志段文件
注意:超过阈值的部分必须要大于一个日志段的大小
-
日志压缩
- log.cleanup.policy=compact 启用压缩策略
- 按照消息key进行整理,有相同key不同value值,只保留最后一个
相关文章
- 11-27Spring / AOP:在数据库中实现活动日志的最佳方法
- 11-27Kafka的2种日志清理策略感受一下
- 11-27kafka删除topic中的数据,适用于比较高的版本
- 11-27【Kafka的Controller选举机制/分区副本选举Leader机制/消费消息的offset记录机制/Rebalance过程与机制以及分区分配策略/发布消息机制/HW与LEO/日志分段存储】
- 11-27分布式存储中的数据分布策略
- 11-27EF中CodeFirst中创建数据库的几种策略
- 11-27第三篇-分析日志和sensor-data中的数据结构
- 11-27Druid 加载 Kafka 流数据配置可以读取和处理的流中数据格式
- 11-27修改kafka中某一主题的数据存留时间
- 11-27数据库 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列。