赞
踩
目前已经更新到了:
上节我们完成了如下内容:
Kafka提供两种日志清理策略:
日志删除任务会根据 log.retention.hours / log.retention.minutes / log.retention.ms 设定日志保留的时间节点。如果超过该设定值,就需要进行删除。默认是7天,log.retention.ms 优先级最高。
Kafka依据日志分段中最大的时间戳进行定位。首先要查询日志分段所对应的时间戳文件,查找时间索引文件中最后一个索引项,若最后一条索引项的时间戳字段大于0,则取该值,否则取最近修改时间。
因为日志文件可以有意无意的被修改,并不能真实的反应日志分段的最大时间消息。
日志删除任务会检查当前日志的大小是否超过设定值,设定项为:log.retention.bytes。单个日志分段的大小由 log.segement.bytes 进行设定。
根据日志分段的下一个日志分段的起始偏移量是否大于等于日志文件的起始偏移量,若是,则可以删除日志分段。
日志压缩是Kafka的一种机制,可以提供较为细粒度的记录保留,而不是基于粗粒度的基于时间保留。
对于具有相同Key,而数据不同,只保留最后一条数据,前面的数据在适合情况下删除。
日志压缩特性,就实时计算来说,可以在异常容灾方面有很好的用途。
比如,我们在Spark、Flink中做实时计算时,需要在内存中维护一些数据,这些数据可能是通过聚合了一天或者一周的日志得到的,这些数据一旦由于异常(内存、网络、硬盘)崩溃了,从头开始计算是需要很长时间的。
一个比较可行的方案就是定时将内存里的数据备份到外部存储介质中,当出现崩溃时,再从外部存介质中恢复并继续计算。
主题的 cleanup.policy 需要设置为:compact
Kafka后台线程会定时将Topic遍历两次:
日志压缩允许删除,除最后一个key外,删除先前出现的所有该Key对应的记录,在一段时间后从日志中清理以释放空间。
注意:日志压缩与Key有关,确保每个消息的Key不为Null。
压缩是在Kafka后台通过定时重新打开Segment来完成的,Segment压缩细节如下图所示:
日志压缩可以确保:
默认情况下,启动日志清理器,若需要启动特定Topic的日志清理,请添加特定的属性。
配置日志清理器,这里为大家总结了以下几点:
Kafka的日志压缩原理并不复杂,就是定时把所有的日志读取两遍,写一遍,而CPU的速度超过磁盘不是问题,只要日志的量对应的读取两遍和写入一遍的时间在接受范围内,那么它的性能就是可以接受的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。