【大数据学习 | kafka高级部分】文件清除原理

2. 两种文件清除策略

kafka数据并不是为了做大量存储使用的,主要的功能是在流式计算中进行数据的流转,所以kafka中的数据并不做长期存储,默认存储时间为7天

那么问题来了,kafka中的数据是如何进行删除的呢?

在Kafka中,存在数据过期的机制,称为data expire。如何处理过期数据是根据指定的policy(策略)决定的,而处理过期数据的行为,即为log cleanup。

在Kafka中有以下几种处理过期数据的策略:

  • log.cleanup.policy=delete(Kafka中所有用户创建的topics,默认均为此策略)

  • 根据数据已保存的时间,进行删除(默认为1周)

  • 根据log的max size,进行删除(默认为-1,也就是无限制)

  • log.cleanup.policy=compact(topic __consumer_offsets 默认为此策略)

  • 根据messages中的key,进行删除操作

  • 在active segment 被commit 后,会删除掉old duplicate keys

  • 无限制的时间与空间的日志保留

自动清理Kafka中的数据可以控制磁盘上数据的大小、删除不需要的数据,同时也减少了对Kafka集群的维护成本。

那Log cleanup 在什么时候发生呢?

  • 首先值得注意的是:log cleanup 在partition segment 上发生

  • 更小/更多的segment,也就意味着log cleanup 发生的频率会上升

  • Log cleanup 不应该频繁发生=> 因为它会消耗CPU与内存资源

  • Cleaner的检查会在每15秒进行一次,由log.cleaner.backoff.ms 控制

2. log.cleanup.policy=delete(日志删除)

log.cleanup.policy=delete 的策略,根据数据保留的时间、以及log的max size,对数据进行cleanup。控制数据保留时间以及log max size的参数分别为:

  • log.retention.hours:指定数据保留的时常(默认为一周,168)

  • 将参数调整到更高的值,也就意味着会占据更多的磁盘空间

  • 更小值意味着保存的数据量会更少(假如consumer 宕机超过一周,则数据便会再未处理前即丢失)

  • log.retention.bytes:每个partition中保存的最大数据量大小(默认为-1,也就是无限大)

  • 再控制log的大小不超过一个阈值时,会比较有用

在到达log cleanup 的条件后,cleaner会自动根据时间或是空间的规则进行删除,新数据仍写入active segment:

针对于这个参数,一般有以下两种使用场景,分别为:

  • log保留周期为一周,根据log保留期进行log cleanup:

  • log.retention.hours=168 以及 log.retention.bytes=-1

  • log保留期为无限制,根据log大小进行进行log cleanup:

  • log.retention.hours=17520以及 log.retention.bytes=524288000

其中第一个场景会更常见。

2. Log Compaction(日志合并)

Log compaction用于确保:在一个partition中,对任意一个key,它所对应的value都是最新的

这里举个例子:我们有个topic名为employee-salary,我们希望维护每个employee当前最新的工资情况。

左边的是compaction前,segments中的数据,右边为compaction 后,segments中的数据,其中有部分key对应的value有更新:

可以看到在log compaction后,相对于更新后的key-value message,旧的message被删除。

Log Compaction 有如下特点:

  • messages的顺序仍然是保留的,log compaction 仅移除一些messages,但不会重新对它们进行排序

  • 一条message的offset是无法改变的(immutable),如果一条message缺失,则offset会直接被跳过

  • 被删除的records在一段时间内仍然可以被consumers访问到,这段时间由参数delete.retention.ms(默认为24小时)控制

需要注意的是:Kafka 本身是不会组织用户发送duplicate data的。这些重复数据也仅会在一个segment在被commit 的时候做重复数据删除,所以consumer仍会读取到这部分重复数据(如果客户端有发的话)。

Log Compaction也会有时失败,compaction thread 可能会crash,所以需要确保给Kafka server 足够的内存用于做这些操作。如果log compaction异常,则需要重启Kafka(此为一个已知的bug)。

Log Compaction也无法通过API手动触发(至少到现在为止是这样),只能server端自动触发。

下面是一个 Log Compaction过程的示意图:

正在写入的records仍会被写入Active Segment,已经committed segments会自动做compaction。此过程会遍历所有segments中的records,并移除掉所有需要被移除的messages。

Log compaction由上文提到的log.cleanup.policy=compact进行配置,其中:

  • Segment.ms(默认为7天):在关闭一个active segment前,所需等待的最长时间

  • Segment.bytes(默认为1G):一个segment的最大大小

  • Min.compaction .lag.ms(默认为0):在一个message可以被compact前,所需等待的时间

  • Delete.retention.ms(默认为24小时):在一条message被加上删除标记后,在实际删除前等待的时间

  • Min.Cleanable.dirty.ratio(默认为0.5):若是设置的更高,则会有更高效的清理,但是更少的清理操作触发。若是设置的更低,则清理的效率稍低,但是会有更多的清理操作被触发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/885079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浏览器存储策略解析(三)Local/sessionStorage实战:如何查看本地浏览器上数据

物理意义上的localStorage/sessionStorage在哪里 我们都知道,localStorage存于本地,sessionStorage存于会话,这是见名知意可以得到的。但是在物理层面他们究竟存储在哪里呢? localStorage和sessionStorage一样,是存储…

设计模式讲解02—责任链模式(Chain)

1. 概述 定义:责任链模式是一种行为型模式,在这个模式中,通常创建了一个接收者对象的链来处理请求,该请求沿着链的顺序传递。直到有对象处理该请求为止,从而达到解耦请求发送者和请求处理者的目的。 解释:责…

判断二叉搜索树(递归)

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。binary search tree (BST) 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 …

【系统设计】高效的分布式系统:使用 Spring Boot 和 Kafka 实现 Saga 模式

在现代分布式系统中,管理跨多个服务的长事务至关重要。传统的分布式事务解决方案往往面临性能瓶颈和复杂性问题,而 Saga 模式 作为一种灵活高效的解决方案,逐渐受到开发者的青睐。本文将探讨如何利用 Spring Boot 和 Kafka 实现 Saga 模式&am…

私有化视频平台EasyCVR海康大华宇视视频平台视频诊断技术是如何实时监测视频质量的?

在现代视频监控系统中,确保视频流的质量和稳定性至关重要。随着技术的进步,视频诊断技术已经成为实时监测视频质量的关键工具。这种技术通过智能分析算法对视频流进行实时评估和处理,能够自动识别视频中的各种质量问题,并给出相应…

JAVA题目笔记(十三) 爬虫

一、网络爬取 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.regex.Matcher; import java.util.regex.Pattern;public class Main {public static v…

探索现代软件开发的五大趋势

在快速变化的技术领域,软件开发正经历着前所未有的变革。随着新工具、框架和编程语言的不断涌现,开发人员必须保持与时俱进,以确保他们的技能和知识库不会过时。本文将探讨当前软件开发领域的五大趋势,以及它们如何塑造未来的技术…

大语言模型(LLM)量化基础知识(一)

请大家关注我的知乎博客:- 派神 - - 知乎 随着大型语言模型 (LLM) 的参数数量的增长,与其支持硬件(加速器内存)增长速度之间的差距越来越大,如下图所示: 上图显示,从 2017 年到 2022 年,语言模…

谨慎使用assert的原因

使用 assert 进行调试和错误检查确实有其优点,但在某些情况下可能会引发一些问题,尤其是在嵌入式系统或特定的应用场景中。下面是 assert 的潜在问题和使用注意事项: 1. 在生产环境中的副作用 问题:assert 通常用于开发和调试阶段…

使用VBA宏合并多个Excel文件的Sheet页

使用VBA宏合并多个Excel文件的Sheet页 在日常的Excel数据处理工作中,我们经常需要将多个Excel文件中的工作表合并到一个Excel文件中。这种操作可以极大地提高数据处理效率,但如果文件数量较多,手动合并会非常繁琐。本文将介绍如何使用VBA宏来…

【comfyui教程】ComfyUI 现已支持 Stable Diffusion 3.5 Medium!人人都能轻松上手的图像生成利器

前言 ComfyUI 现已支持 Stable Diffusion 3.5 Medium!人人都能轻松上手的图像生成利器 大家翘首以盼的Stable Diffusion 3.5 Medium模型终于来了!就在今天,Stability AI 正式推出了这款“亲民版”平衡模型,让创作者们得以在消费…

大模型微调技术 --> LoRA 系列之 AdaLoRA

AdaLoRA 1.摘要 之前的微调方法(如低秩更新)通常将增量更新的预算均匀地分布在所有预训练的权重矩阵上,并且忽略了不同权重参数的不同重要性。结果,微调结果不是最优的。 为了弥补这一差距,我们提出了AdaLoRA,它根据权重矩阵的…

带你搞懂红黑树的插入和删除

文章目录 1. 红黑树1.1 红黑树的概念1.2 红黑树的性质1.3 红黑树节点的定义1.4 红黑树的插入找到插入的位置调节平衡 1.5 红黑树的删除删除节点平衡调整 1.6 红黑树和AVL树的比较 1. 红黑树 1.1 红黑树的概念 红黑树也是一种二叉搜索树,但是在每一个节点上增加了一个存储位表…

揭秘全向轮运动学:机动艺术与上下位机通信的智慧桥梁

✨✨ Rqtz 个人主页 : 点击✨✨ 🌈Qt系列专栏:点击 🎈Qt智能车上位机专栏: 点击🎈 本篇文章介绍的是有关于全向轮运动学分析,单片机与上位机通信C代码以及ROS里程计解算的内容。 目录 大纲 ROS(机器人操作系统&…

Python 函数类型

普通函数匿名函数(Lambda函数)高阶函数内置函数递归函数闭包函数装饰器函数方法 8.1. 实例方法 8.2. 类方法 8.3. 静态方法 1. 普通函数 最基本的函数类型,通过 def 关键字定义。 def add(a, b):return a bprint(add(3, 5)) # 输出: 82…

移远通信推出八款天线新品,覆盖5G、4G、Wi-Fi和LoRa领域

近日,全球领先的物联网整体解决方案供应商移远通信宣布,再次推出八款高性能天线新品,进一步丰富其天线产品阵容,更好地满足全球客户对高品质天线的更多需求。具体包括5G超宽带天线YECT005W1A和YECT004W1A、5G天线YECT028W1A、4G天…

深度学习:NAT Decoder 详解

NAT Decoder 详解 非自回归转换器(Non-Autoregressive Transformer, NAT)解码器是一种特殊类型的解码器,设计用来在序列生成任务中加速输出的生成过程。与传统的自回归解码器(如上文所述的AT解码器)不同,N…

【设计模式系列】桥接模式(十三)

一、什么是桥接模式 桥接模式(Bridge Pattern)是一种结构型设计模式,其核心目的是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式主要用于处理那些在设计时无法确定实现细节的场合,或者需要在多个实现之间…

Java多态和继承(下篇)

今天接着学习多态和继承 目录 1 继承1.1 再谈初始化1.2 protect关键字1.3 继承方式1.4 final 关键字1.5 组合 2 多态2.1 多态的概念2.2 多态实现条件2.3 重写2.4 向上转型和向下转型2.4.1 向上转型2.4.2 向下转型 2.5 多态的优缺点2.6 避免在构造方法中使用重写的方法 总结 1 继…

动态规划理论基础和习题【力扣】【算法学习day.25】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴&am…