Kafka日志清理实现详细过程讲解

 更新时间:2023年05月17日 09:22:30   作者:shysh  
这篇文章主要为大家介绍了Kafka日志清理实现详细过程讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Kafka日志清理目前主要有两种策略:

  • 日志删除
  • 日志压缩:日志压缩就是根据key来保留最后一条消息。

Kafka提供log.cleanup.policy参数进行相应配置,默认值:delete,还可以选择compact。

日志删除

配置默认值说明
log.retention.check.interval.ms300000 (5分钟)检测频率
log.retention.hours168 (7天)日志保留时间小时
log.retention.minutes日志保留时间分钟
log.retention.ms日志保留时间毫秒
file.delete.delay.ms60000 (1分钟)延迟执行删除时间
log.retention.bytes-1 无穷大运行保留日志文件最大值
log.retention.bytes1073741824 (1G)日志文件最大值

Kafka会根据检测频率周期性的检测日志是否需要删除,日志删除策略主要有以下集中:

  • 基于时间的删除策略
  • 基于文件大小的删除策略
  • 基于日志文件起始偏移量

基于时间删除

Kafka会查找日志段的时间戳索引文件中的最后一条记录,如果最后一条timestamp小于0,则取最近修改时间。

当确认完需要删除的日志段以后,需要进行以下删除操作:

  • 从日志对象中所维护日志分段的ConcurrentSkipListMap中移除待删除的日志分段,保证没有线程对这些日志分段进行读取操作。
  • 为日志段中的所有文件加上.delete后缀
  • Kafka中会有一个命名为"delete-file"的延迟任务来删除这些无效的日志数据

假如当前日志段中也有需要删除的数据,那么kafka会先进行分段,创建一个新的活跃日志段,然后执行删除操作。

基于大小删除

  • 计算需要删除的日志大小的总和(当前日志大小-所允许的日志文件最大值)
  • 然后从第一个日志分段开始查找,查找可以进行删除的日志段集合
  • 最后执行删除操作

基于日志文件起始偏移量

日志文件起始偏移量默认等于第一个日志段的基准偏移量,但随着数据的删除操作,该值也在不断变化。

基于日志文件起始偏移量的判断规则是,如果一个日志段的下一个日志段的起始偏移量如果小于日志文件起始偏移量,那么该日志段就可以被加入到删除队列,最后执行删除。

以上就是Kafka日志清理实现详细过程讲解的详细内容,更多关于Kafka日志清理的资料请关注脚本之家其它相关文章!

相关文章

  • 在Java8中构建Stream流的多种方式详解

    在Java8中构建Stream流的多种方式详解

    当我们处理集合数据时,往往需要对其进行各种操作,如过滤、映射、排序、归约等,在 Java 8 中引入的 Stream 流为我们提供了一种更加简洁和灵活的方式来处理数据,本文将介绍如何基于 Stream 构建流,为你展示创建和操作流的多种方法
    2023-08-08
  • JAVA读取PDF、WORD文档实例代码

    JAVA读取PDF、WORD文档实例代码

    本篇文章主要通过实例代码介绍了JAVA读取PDF、WORD文档,需要的朋友可以参考下
    2017-04-04
  • 举例解析Java的设计模式编程中里氏替换原则的意义

    举例解析Java的设计模式编程中里氏替换原则的意义

    这篇文章主要介绍了Java的设计模式中里氏替换原则的意义,文中举例来说明里氏替换原则中强调的继承特性方面可能带来的问题,需要的朋友可以参考下
    2016-02-02
  • Java file类中renameTo方法操作实例

    Java file类中renameTo方法操作实例

    renameTo()方法是File类的一部分,renameTo()函数用于将文件的抽象路径名重命名为给定的路径名​​,下面这篇文章主要给大家介绍了关于Java file类中renameTo方法操作的相关资料,需要的朋友可以参考下
    2022-11-11
  • java优化if-else的11种方案

    java优化if-else的11种方案

    If-Else结构是一种常见的条件判断语句,通过优化If-Else结构,可以提高代码的可读性和执行效率,本文主要介绍了java优化if-else的11种方案,感兴趣的可以了解一下
    2024-08-08
  • Spring MVC之WebApplicationContext_动力节点Java学院整理

    Spring MVC之WebApplicationContext_动力节点Java学院整理

    这篇文章主要介绍了Spring MVC之WebApplicationContext的相关资料,需要的朋友可以参考下
    2017-08-08
  • Mybatis的类型转换接口TypeHandler

    Mybatis的类型转换接口TypeHandler

    这篇文章主要介绍了Mybatis的类型转换接口TypeHandler,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • SpringBoot整合RabbitMQ实现六种工作模式的示例

    SpringBoot整合RabbitMQ实现六种工作模式的示例

    这篇文章主要介绍了SpringBoot整合RabbitMQ实现六种工作模式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • 基于Jenkins搭建.NET Core持续集成环境过程图解

    基于Jenkins搭建.NET Core持续集成环境过程图解

    这篇文章主要介绍了基于Jenkins搭建.NET Core持续集成环境过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Java中的方法、常量、变量、参数用例详解

    Java中的方法、常量、变量、参数用例详解

    在JVM的运转中,承载的是数据,而数据的一种变现形式就是“量”,量分为:常量与变量,我们在数学和物理学中已经接触过变量的概念了,在Java中的变量就是在程序运行过程中可以改变其值的量,这篇文章主要介绍了Java中的方法、常量、变量、参数,需要的朋友可以参考下
    2024-01-01

最新评论