kafka入门,文件存储机制(十六)

news/2024/7/23 23:20:39 标签: kafka, 分布式

文件存储机制

在这里插入图片描述

1、Topic数据的存储机制

topic是逻辑上的概念,而partition是物理上的概念,每个partition对应一个log文件,该log文件中存储就是Producer生产的数据。Producer生产的数据会不断追加到该log文件末端,为防止log文件过大导致数据定位效率低下,Kafka采取可分片和索引机制,将每个partitioner分为多个segment,每个segment包括:“.index"文件、”.log"文件和timeindex等文件,这些文件位于一个文件夹夏,该文件夹的命名规则为:topic名称+分区序号,例如:first-0
1、一个topic分为多个partition
2、一个partion分为多个seagment
3、.log日志文件
4、.index 偏移索引文件
4、 .timeindex事件索引文件
其他文件
说明:index和log文件时以当前segment的第一条信息的offset命名

2、思考:Topic 数据到底存储在什么位置?

存在data文件夹下,这里我是在我的安装路径下
在这里插入图片描述

cat  cat 00000000000000000000.log 

乱码
在这里插入图片描述
需要使用工具查看index和log等信息

 kafka-run-class.sh kafka.tools.DumpLogSegments --files 00000000000000000000.index

在这里插入图片描述

3、index 文件和 log 文件详解

在这里插入图片描述
1、根据目标offset定位Segment文件
2、找到小于等于目标offset的最大offset对应的索引项
3、定位到log文件
4、向下遍历找到目标Record
注意:
1、index为稀疏索引,大约每往log文件写入4kb数据,会往index文件写入一条索引。
2、index文件中保存的offset相对offset,这样能确保offset的值所占空间不会过大,因此能将offset的值控制固定大小

参数描述
log.segment.byteskafka中log日志是分成一块块存储的,此配置是指log日志划分成分的大小,默认1G
log.index.interval.bytes默认4kb,kafka里面每单写入了4KB大小的日志(.log),然后就往index文件里面记录一个索引,稀疏索引

4、 文件清理策略

Kafka中默认的日志保存事件为7天,可以通过调整如下参数修改保存时间
log.retention.hours,最低优先级小时,默认7天
log.retention.minutes,分钟
log.retention.ms,最高优先级毫秒
log.retention.check.interval.ms,负责设置检查周期,默认5分钟
那么日志一旦超过了设置时间,怎么处理呢?
Kafka中提供的日志清理策略有delete和compact两种
1)delete日志删除:将过期数据删除
log.cleanup.policy = delete所有数据启用删除策略
基于时间:默认打开。以segment中所有记录中的最大时间戳作为该文件时间戳
基于大小:默认关闭,超过设置所有日志总大小,删除最早的segment,log.retention.bytes,默认等
于-1,表示无穷大。
如果一个 segment 中有一部分数据过期,一部分没有过期,怎么处理?
2)compact日志压缩
在这里插入图片描述
compact日志压缩:对于相同key不同的valu值,值保留最后一个版本
log.cleanup.policy = compact 所 所以有数据启用压缩策略
压缩后的offset是不连续的,比如上图中没有6,当从这些offset消息消息时,将会拿到比这个offset大的offset对应消息,实际上会拿到offset为7的消息,从这个位置开始消费
这种策略只适合特殊场景,比如消息的key是用户ID,value是用户的资料,通过这种压缩策略,整个消息集里面保存了所有用户最新资料


http://www.niftyadmin.cn/n/1007207.html

相关文章

2022年12月份青少年软件编程Python等级考试试卷六级真题(含答案)

一、单选题(共25题,共50分) 1.数据文件“abc.txt”中包含若干个英文单词,如图所示: 读取文件“abc.txt”中数据的Python程序段如下: file abc.txt word_b [] for word in open(file):if word[0:1] a and len(word)>4:wo…

Web安全——JavaScript基础(加入案例)

JavaScript基础 一、概述二、嵌入方法1、内嵌式2、外链式3、行内式 三、语句四、注释五、变量六、JavaScript 保留关键字七、JavaScript 作用域1、JavaScript 局部变量2、JavaScript 全局变量 八、数据类型1、判断类型2、数字类型(Number)3、字符串型&am…

2023年上半年全部是关于人工智能

2023年上半年对于科技行业来说是一段惊心动魄的旅程——从微软(MSFT)争夺收购动视暴雪(ATVI),到Meta(META)首席执行官马克扎克伯格和特斯拉(TSLA)首席执行官埃隆马斯克试…

Java泛型详解:为什么使用泛型?如何使用泛型?

Java泛型详解:为什么使用泛型?如何使用泛型? 💘一、为什么使用泛型?💘二、如何使用泛型?💖1. 泛型类的使用:💖2. 泛型方法的使用:💖3.…

主成分分析系列(二)为何特征向量是主成分

在主成分分析系列(一)概览及数据为何要中心化这篇文章中介绍了PCA算法的大概想法及数据为何要中心化,在这篇文章具体推导PCA算法的过程。 1. 首先 PCA 最原始的想法是: 设 V \mathbf{V} V 为 d {d} d 维 线性空间(即…

CH543乐得瑞单C口显示器方案(LDR6020)

首先显示器的种类很多,有桌面显示器,便携显示器,智能显示器,甚至AR眼镜也可以算是一个微型显示器。以往的显示器传输视频信号多为VGA和HDMI,当然DP也有,只是占少数,再早之前还有模拟信号接口等等&#xff0…

Python实现发送电子邮件功能

大家好,以编程方式发送电子邮件可以成为自动化通信过程的一种强大方式,本文将探讨如何使用Python发送电子邮件,介绍如何设置SMTP服务器、为Gmail生成应用程序密码,并提供使用smtplib库发送电子邮件的逐步指南。 在深入研究编码之…

Prettier - Code formatter配置(vscode)

1.安装Prettier 2.设置-->搜索format on save 并打勾 3.搜索default format 并选择Prettier - Code formatter 4.点击右上角打开setting.json 5.看最后一行是否存在如下配置,有就说明配置成功,没有重新前面步骤重新设置一下 6.根目录是否存在.prettierrc.json,没有创建一下 …