大数据-70 Kafka 高级特性 物理存储 日志存储 日志清理: 日志删除与日志压缩

news2024/12/23 20:41:06

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(正在更新…)

章节内容

上节我们完成了如下内容:

  • 日志索引文件
  • 查看物理存储、查看详细的索引文件
  • 消息偏移
  • 偏移量的存储

在这里插入图片描述

日志清理

Kafka提供两种日志清理策略:

  • 日志删除:按照一定的删除策略,将不满足条件的数据进行数据删除
  • 日志压缩:针对每个消息的Key进行整合,对于有相同的Key的不同Value值,只保留最后一个版本。
  • Kafka提供 log.cleanup.policy 参数进行相应设置,默认值:delete。还可以选择compact。
  • 主题级别的配置是:cleanup.policy

日志删除

基于时间

日志删除任务会根据 log.retention.hours / log.retention.minutes / log.retention.ms 设定日志保留的时间节点。如果超过该设定值,就需要进行删除。默认是7天,log.retention.ms 优先级最高。

Kafka依据日志分段中最大的时间戳进行定位。首先要查询日志分段所对应的时间戳文件,查找时间索引文件中最后一个索引项,若最后一条索引项的时间戳字段大于0,则取该值,否则取最近修改时间。

为什么不直接选最近修改时间?

因为日志文件可以有意无意的被修改,并不能真实的反应日志分段的最大时间消息。

删除过程

  • 从日志对象中所维护日志分段的跳跃表中移除待删除的日志分段,保证没有现成对这些日志分段进行读取操作。
  • 这些日志分段上所有文件添加上 .delete 后缀。
  • 交由一个 delete-file 命名的延迟任务来删除这些 .delete 为后缀的文件,延迟执行时间可以通过 file.delete.delay.ms 进行设置。

如果活跃日志分段中存在需要删除的数据?

  • Kafka会切分出一个新的日志分段作为活跃的日志分段,该日志分段不删除,删除原来的日志分段。
  • 先腾出地方,再删除。

基于日志大小

日志删除任务会检查当前日志的大小是否超过设定值,设定项为:log.retention.bytes。单个日志分段的大小由 log.segement.bytes 进行设定。

删除过程

  • 计算需要被删除的日志总大小(当前日志大小(所有分段)减去retention值)
  • 从日志文件第一个LogSegment开始查找可删除的日志分段的文件集合
  • 执行删除

基于偏移量

根据日志分段的下一个日志分段的起始偏移量是否大于等于日志文件的起始偏移量,若是,则可以删除日志分段。
在这里插入图片描述

删除过程

  • 从头开始遍历每个日志分段,日志分段1的下一个日志分段的起始偏移量为21,小于LogStartOffset,将日志分段1加入到删除队列中
  • 日志分段2的下一个日志分段的起始偏移量35,小于LogStartOffset,将日志分段2加入到删除队列中
  • 日志分段3的下一个日志分段的起始偏移量57,小于LogStartOffset,将日志分段3加入到删除队列中
  • 日志分段4的下一个日志分段的起始偏移量71,大于LogStartOffset,则不进行删除。

日志压缩

基础概念

日志压缩是Kafka的一种机制,可以提供较为细粒度的记录保留,而不是基于粗粒度的基于时间保留。
对于具有相同Key,而数据不同,只保留最后一条数据,前面的数据在适合情况下删除。

应用场景

日志压缩特性,就实时计算来说,可以在异常容灾方面有很好的用途。
比如,我们在Spark、Flink中做实时计算时,需要在内存中维护一些数据,这些数据可能是通过聚合了一天或者一周的日志得到的,这些数据一旦由于异常(内存、网络、硬盘)崩溃了,从头开始计算是需要很长时间的。

一个比较可行的方案就是定时将内存里的数据备份到外部存储介质中,当出现崩溃时,再从外部存介质中恢复并继续计算。

使用日志压缩来替代这些外部存储有哪些优势和好处?

  • Kafka即是数据源又是存储工具,可以简化技术栈,降低维护成本
  • 使用外部存储介质的话,需要将存储的Key记录下来,恢复的时候再使用这些Key将数据取回,实现起来有一定的工程难度和复杂度。使用Kafka的日志压缩特性,只需要把数据写入Kafka,等异常出现恢复任务再读回内存就可以了
  • Kafka对于磁盘的读写做了大量的优化工作,比如磁盘顺序读写。相对于外部存储介质没有索引查询等工作量负担,可以实现高性能。同时,Kafka的日志压缩机制可以充分利用廉价的磁盘,不用依赖昂贵的内存来处理,在性能相似的情况下,实现非常高的性价比(仅针对异常处理和容灾的场景)。

日志压缩实现细节

主题的 cleanup.policy 需要设置为:compact
Kafka后台线程会定时将Topic遍历两次:

  • 记录每个Key的Hash值最后一次出现的偏移量
  • 第二次检查每个Offset对应的Key是否在后面的日志中出现过,如果出现了就删除对应的日志。

日志压缩允许删除,除最后一个key外,删除先前出现的所有该Key对应的记录,在一段时间后从日志中清理以释放空间。
注意:日志压缩与Key有关,确保每个消息的Key不为Null。

压缩是在Kafka后台通过定时重新打开Segment来完成的,Segment压缩细节如下图所示:
在这里插入图片描述
日志压缩可以确保:

  • 任何保持在日志头部以内的使用者都将看到所写的每条消息,这些消息将具有顺序偏移量。
  • 可以使用Topic的min.compation.lag.ms属性来保证消息在被压缩之前必须经过的最短时间,也就是说,它为每个消息(未压缩)头部停留的时间提供下一个下限。可以使用Topic的max.compactiton.lag.ms属性来保证从收到消息符合压缩条件之间的最大延时
  • 消息始终保证顺序,压缩永远不会重新排序消息,只是删除一些而已
  • 消息的偏移量永远不会改变,它是日志中位置的永久标识
  • 从日志开始的任何使用者将至少看到所有记录的最终状态,按记录的顺序写入。
  • 另外,如果使用者在比Topic的log.cleaner.delete.retention.ms短的时间内到达日志的头部,则会看到已删除的所有的delete标记, 保留时间默认是24小时。

默认情况下,启动日志清理器,若需要启动特定Topic的日志清理,请添加特定的属性。

日志清理器配置

配置日志清理器,这里为大家总结了以下几点:

  • log.cleanup.policy设置compact,Broker的配置,影响集群中所有Topic
  • log.cleaner.min.compaction.lag.ms,用于防止对更新超过最小信息进行压缩,如果没有设置,除最后一个Segment之外,所有Segment都有资格进行压缩。

Kafka的日志压缩原理并不复杂,就是定时把所有的日志读取两遍,写一遍,而CPU的速度超过磁盘不是问题,只要日志的量对应的读取两遍和写入一遍的时间在接受范围内,那么它的性能就是可以接受的。

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

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

相关文章

万字长文讲透数字化转型

温馨提醒:1.6w字详细拆解,内容篇幅较长,建议先收藏~ 数字化浪潮正在席卷全球,践行数字化转型和提升企业的运营水平与竞争力,已经成为各国企业角力全球市场的重要议题。为此,很多国家政府都推出了鼓励和推动…

开发者们都在讨论Bandizip,你真的不心动吗?

前言 在这个信息爆炸的时代,数据如潮水般涌来,我们的电脑空间似乎永远不够用;每当面对堆积如山的文件,你是否也曾感到头疼不已?别急,小江湖今天就要带你走进一个神奇的世界,那里有一款软件&…

Linux:多线程(二.理解pthread_t、线程互斥与同步、基于阻塞队列的生产消费模型)

上次讲解了多线程第一部分:Linux:多线程(一.Linux线程概念、线程控制——创建、等待、退出、分离,封装一下线程) 文章目录 1.理解Linux下线程——理解tid2. Linux线程互斥2.1相关概念2.2引入问题分析问题解决思路 2.3L…

Sqli-labs靶场65关详解(一)

前言:目的是通过构造sql语句来窃取数据库数据 一.sqli-labs靶场(1~4) 1~4使用了union联合查询字符型注入,要点在于闭合单双引号括号 要点:union联合查询 UNION 操作符用于合并两个或多个 SELECT 语句的结果集UNION 内部的 SELECT语句必须拥有相同数量的列列也必须拥有相似的…

YARN 的介绍

YARN 的介绍 一、YARN 产生背景1.1 MapReduce 1.0 系统架构 1.2 MapReduce 1.0架构缺陷二、YARN 是什么三、YARN 作用四、YARN 架构五、工作原理六、MapReduce ON YARN 工作流程七、YARN 的容错性八、YARN 的高可用八、YARN 调度器8.1 先进先出调度器8.2 容量调度器8.3 公平调度…

PyTorch深度学习实战(1)——PyTorch安装与配置

本章共有两节,2.1节介绍如何安装PyTorch,以及如何配置学习环境;2.2节带领读者快速浏览PyTorch中的主要内容,帮助读者初步了解PyTorch。 PyTorch是一款以C语言为主导开发的轻量级深度学习框架,它提供了丰富的Python接口…

Redis 大Key排查与优化

Redis 大Key排查与优化 什么是BigKey bigkey简单来说就是存储本身的key值空间太大,或者hash,list,set等存储中value值过多。没有具体的衡量标准。 参考的大小范围: String 类型值大于10KB。Hash、List、Set、Zset类型元素个数…

【Mybatis Plus】Mybatis Plus_快速上手

文章目录 1.Mybatis Plus 简介2.与SpringBoot集成2.1在maven中引入MP依赖2.3 在application.yml中,配置好自己的数据库文件 3. 快速上手 创建实体类entity/User.java3.1创建通用Mapper3.2 使用继承了BaseMapper的Mapper开始编写Crud3.2.1 Insert3.2.2 deleted3.2.3 …

5.1树的基本概念

5.11树的定义 树是n>0的有限集.树适用于有层次结构的数据 只有根节点无前驱 只有叶子节点无后继 有后继的节点为分支节点 除根节点外,任何一个节点都有且只有一个前驱 5.12树的基本术语 祖先节点:从k-->R经过的所有节点 子孙节点:从一个节点出发后下面的所有节点 …

Oracle【plsql编写九九乘法表】

九九乘法表 DECLAREi NUMBER : 1;j NUMBER : 1; BEGINFOR i IN 1 .. 9LOOPFOR j IN 1 .. iLOOPDBMS_OUTPUT.put (i || * || j || || i * j || );END LOOP;DBMS_OUTPUT.put_line ( );END LOOP; END;输出结果

【YashanDB数据库】Ubuntu系统加载Yashan C驱动后无法使用PHP

【问题分类】驱动使用 【关键字】驱动使用、PHP、Ubuntu、C驱动 【问题描述】 客户将YashanDB的C驱动lib加载到环境变量LD_LIBRARY_PATH后,PHP报错:PHP Fatal error:Unable to start pcre module in Unknown on line 0 【问题原因分析】经…

集成学习:融合多个模型

集成学习 是一种机器学习范式,它创建一组模型,并将它们的预测结果结合起来,以期望最终模型能够优于单个模型。集成学习的关键在于如何有效地结合不同的模型。 集成学习算法分为:Bagging,Boosting和Stacking等类型。 B…

关于k8s集群的存储卷

目录 1.emptyDir存储卷 2.hostPath存储卷 3.nfs共享存储卷 容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失——容器以干净的…

大神器! 直接显示中英文期刊的等级, 及该期刊在中国顶级大学的认可度!

今天,推荐一款学术神器——easyScholar,别看这个插件小小的,它的功能非常强大。 它可以显示期刊的影响因子、中科院分区、JCR分区等信息! 比如,它可以在知网数据库中显示期刊等级信息。 也能够在万方数据库中显示期刊等…

【Linux WEB】Linux嵌入式WEB服务器(BOA)部署

1. 下载boa源码 进入官网下载http://www.boa.org/news.html,版本为0.94.13 2. 交叉编译boa源码 2.1 解压boa源码压缩包   将下载好的压缩包放入到Ubuntu系统中进行解压 tar -zxvf boa-0.94.13.tar.gz 2.2 生成并配置Makefile文件 (1)将…

交换机常用的贴片网络变压器,滤波器H5084NL / H82409S

华强盛电子导读千兆交换机: 199/2643/0038 在交换机行业中,常用的贴片网络变压器和滤波器型号会根据具体的应用需求、性能指标、成本考量等因素而有所不同。通常,这些器件需要满足网络通信中的高频传输、阻抗匹配、信号隔离、电磁兼容&…

【C++】vector 的模拟实现

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…

⌈ 传知代码 ⌋ CNN实现脑电信号的情感识别

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

怎么压缩ppt文件?4个常用的PPT压缩技巧分享!

在当今数字化的工作和学习环境中,PPT已经成为我们表达观点、展示成果的重要工具。然而,有时PPT文件的体积过大,给我们的分享和存储带来了诸多不便,表现在:无端占用宝贵的磁盘空间,接收下载耗费时间长等。 …

KSV1(KSU1)/KSV5(KSU5)-创建分配(分摊)规则/运行分配

将A成本中心费用分摊给B、C两个成本中心: 将B、C两个成本中心建一个成本中心组KSV1-创建分配规则 选择发送方的成本中心,选择接收方的成本中心 给不同成本中心分配比例。 点击保存 点击概览可以看到该条规则,可以在系统中创建多条规则。 K…