kafka是存储到本地磁盘么_Kafka 中的消息存储在磁盘上的目录布局是怎样的?

Kafka 中的消息是以主题为基本单位进行归类的,各个主题在逻辑上相互独立。每个主题又可以分为一个或多个分区,分区的数量可以在主题创建的时候指定,也可以在之后修改。每条消息在发送的时候会根据分区规则被追加到指定的分区中,分区中的每条消息都会被分配一个唯一的序列号,也就是通常所说的偏移量(offset),具有4个分区的主题的逻辑结构见下图。

5bc65c35e472c8466897ee915bc139a2.png

如果分区规则设置得合理,那么所有的消息可以均匀地分布到不同的分区中,这样就可以实现水平扩展。不考虑多副本的情况,一个分区对应一个日志(Log)。为了防止 Log 过大,Kafka 又引入了日志分段(LogSegment)的概念,将 Log 切分为多个 LogSegment,相当于一个巨型文件被平均分配为多个相对较小的文件,这样也便于消息的维护和清理。

事实上,Log 和 LogSegment 也不是纯粹物理意义上的概念,Log 在物理上只以文件夹的形式存储,而每个 LogSegment 对应于磁盘上的一个日志文件和两个索引文件,以及可能的其他文件(比如以“.txnindex”为后缀的事务索引文件)。下图描绘了主题、分区、副本、Log 以及 LogSegment 之间的关系。

64607c737de030ef6221a98efb5334f2.png

image

接触过 Kafka 的老司机一般都知晓 Log 对应了一个命名形式为-的文件夹。举个例子,假设有一个名为“topic-log”的主题,此主题中具有4个分区,那么在实际物理存储上表现为“topic-log-0”、“topic-log-1”、“topic-log-2”、“topic-log-3”这4个文件夹:

7600fb87897ecaac85f289415652caf8.png

向 Log 中追加消息时是顺序写入的,只有最后一个 LogSegment 才能执行写入操作,在此之前所有的 LogSegment 都不能写入数据。为了方便描述,我们将最后一个 LogSegment 称为“activeSegment”,即表示当前活跃的日志分段。随着消息的不断写入,当 activeSegment 满足一定的条件时,就需要创建新的 activeSegment,之后追加的消息将写入新的 activeSegment。

为了便于消息的检索,每个 LogSegment 中的日志文件(以“.log”为文件后缀)都有对应的两个索引文件:偏移量索引文件(以“.index”为文件后缀)和时间戳索引文件(以“.timeindex”为文件后缀)。每个 LogSegment 都有一个基准偏移量 baseOffset,用来表示当前 LogSegment 中第一条消息的 offset。偏移量是一个64位的长整型数,日志文件和两个索引文件都是根据基准偏移量(baseOffset)命名的,名称固定为20位数字,没有达到的位数则用0填充。比如第一个 LogSegment 的基准偏移量为0,对应的日志文件为00000000000000000000.log。

举例说明,向主题topic-log中发送一定量的消息,某一时刻topic-log-0目录中的布局如下所示。

876ad88462f4c29def258123f6cfb5dc.png

示例中第2个 LogSegment 对应的基准位移是133,也说明了该 LogSegment 中的第一条消息的偏移量为133,同时可以反映出第一个 LogSegment 中共有133条消息(偏移量从0至132的消息)。

注意每个 LogSegment 中不只包含“.log”、“.index”、“.timeindex”这3种文件,还可能包含“.deleted”、“.cleaned”、“.swap”等临时文件,以及可能的“.snapshot”、“.txnindex”、“leader-epoch-checkpoint”等文件。

从更加宏观的视角上看,Kafka 中的文件不只上面提及的这些文件,比如还有一些检查点文件,当一个 Kafka 服务第一次启动的时候,默认的根目录下就会创建以下5个文件:

0a183d3140c81fa7abfcc2a3e161151e.png

消费者提交的位移是保存在 Kafka 内部的主题__consumer_offsets中的,初始情况下这个主题并不存在,当第一次有消费者消费消息时会自动创建这个主题。

d383e2da5348b4f46462819f792a161e.png

在某一时刻,Kafka 中的文件目录布局如上图所示。每一个根目录都会包含最基本的4个检查点文件(xxx-checkpoint)和 meta.properties 文件。在创建主题的时候,如果当前 broker 中不止配置了一个根目录,那么会挑选分区数最少的那个根目录来完成本次创建任务。

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

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

相关文章

ps efgrep mysql 命令_mysql常用管理命令

安装直接yum install mysql-serveryum install mysqlservice mysqld start //启动mysql服务登录mysql -u root -p初次设置密码set password password(qwer,1234);flush privileges;GRANT ALL PRIVILEGES ON *.* TO rootlocalhost IDENTIFIED BY MyPassword WITH GRANT OPTION;F…

英特尔全部cpu列表_Debian发布安全更新 以修复近期披露的英特尔MDS安全漏洞

Debian项目团队今天发布了针对英特尔微代码固件的新安全更新,以修复近期披露的英特尔MDS(微架构数据采样)漏洞。今年5月14日,英特尔披露了影响旗下诸多英特尔微处理器系列的四个新安全漏洞,不过随后很快发布了缓解这些漏洞的安全升级&#xf…

if or函数套用_IF函数和OR函数的套用我想利用IF函数和 – 手机爱问

1 设函数f(x)在(-∞,∞)上为减函数,则( )A f(a)大于f(2a)B f(a^2)小于f(a)C f (a^2a)小于f(a)D f(a^21)小于f(a)请求解题过程!!感谢!2 函数f(x)x^22(a-1)x2在区间(-∞,4】上单调递减&#xff0c…

poi 设置word表格颜色_POI工具练习

POI是一个可以对excel文件进行操作的jar包,使用它可以帮助我们对excel进行操作,也就可以帮助我们实现在jsp页面添加导入数据的功能。只要我们在控制层servlet中加入处理的方法就可以了;首先使用到POI都会与JXL进行对比:查阅之后大…

Java类的定义

类是 Java 中的一种重要的引用数据类型,也是组成 Java 程序的基本要素,因为所有的 Java 程序都是基于类的。 在 Java 中定义一个类,需要使用 class 关键字、一个自定义的类名和一对表示程序体的大括号。完整语法如下: [public][…

excel文件存入mysql_解析excel文件并将数据导入到数据库中

今天领导给安排了一个临时工作,让我将一个excel里面的数据解析后放入数据库中,经过一个下午的努力成功完成,现在将代码献上,希望对大家有所帮助一、需要导入的jar1.commons-collections4-4.1.jar2.poi-3.17-beta1.jar3.poi-ooxml-…

android app性能优化_Android性能优化之Apk 瘦身优化

瘦身主要是下载转换率提高头部App都有Lite版本渠道合作产商要求APK 分析工具ApkTool 反编译工具官网:https://ibotpeaches.github.io/ApkTool apktool d students.apkAnalyze apkAndroid studio 2.2之后使用 - 查看apk组成大小,各资源占比 - 查看dex文件…

Java类的属性

在 Java 中类的成员变量定义了类的属性。例如&#xff0c;一个学生类中一般需要有姓名、性别和年龄等属性&#xff0c;这时就需要定义姓名、性别和年龄 3 个属性。声明成员变量的语法如下&#xff1a; [public|protected|private][static][final]<type><variable_nam…

vue 拖动 datatransfer 问题_electron-vue跨平台桌面应用开发实战教程(四)——窗口样式amp;打开新窗口...

&#xfeff;> 本文我们讲解下怎么修改窗口样式&#xff0c;系统默认的窗口非常普通&#xff0c;通常与设计不符&#xff0c;所以我们要自定义&#xff0c;接下来我们讲解下怎么去掉原有样式&#xff0c;怎么实现实现窗口的最小化&#xff0c;最大化和关闭按钮。还有怎么打开…

string 包含_一文搞懂String常见面试题,从基础到实战,到原理分析和源码解析...

01 string基础1.1 Java String 类字符串广泛应用 在 Java 编程中&#xff0c;在 Java 中字符串属于对象&#xff0c;Java 提供了 String 类来创建和操作字符串。1.2 创建字符串创建字符串最简单的方式如下:String greeting "菜鸟教程";在代码中遇到字符串常量时&…

RPN网络在图像处理中的应用

RPN&#xff08;Region Proposal Network&#xff0c;区域建议网络&#xff09;是深度学习中用于目标检测的关键组件之一&#xff0c;它通常与后续的目标检测网络&#xff08;如Fast R-CNN、Faster R-CNN等&#xff09;结合使用。RPN的主要作用是生成候选目标区域&#xff0c;从…

Java创建一个学生类

创建一个表示学生的实体类 Student&#xff0c;其中有学生姓名、性别和年龄信息。要求使用属性来表示学生信息&#xff0c;最终编写测试代码。 首先定义一个名为 Student 的类&#xff0c;代码如下&#xff1a; public class Student {// 学生类 }在类中通过属性定义学生、性…

pythonwhile爬虫教程_Python 爬虫从入门到进阶之路(十一)

之前的文章我们介绍了一下 Xpath 模块&#xff0c;接下来我们就利用 Xpath 模块爬取《糗事百科》的糗事。之前我们已经利用 re 模块爬取过一次糗百&#xff0c;我们只需要在其基础上做一些修改就可以了&#xff0c;为了保证项目的完整性&#xff0c;我们重新再来一遍。我们通过…

python中fd是什么意思_python里fd是什么意思

文件描述字(file descriptor&#xff0c;fd)是系统中用来唯一记录当前已经打开的文件的标识号&#xff0c;fd是一个整数。除了file对象外&#xff0c;Python还提供对fd的操作&#xff0c;对fd的操作更加底层&#xff0c;fd和Python中的file对象是不同的概念。在介绍file对象时已…

show index mysql_MySQL SHOW INDEX语法的实际应用

以下的文章主要描述的是MySQL SHOW INDEX语法的实际操作用法以及其实际查看索引状态(语法)的具体内容的描述&#xff0c;如果你对这一技术&#xff0c;心存好奇的话&#xff0c;以下的文章将会揭开它的神秘面纱。SHOW INDEX FROM tbl_name [FROM db_name]MySQL SHOW INDEX会返回…

阿联酋esma认证怎么做_百度爱采购企业认证是怎么做的?这些你要知道!

入驻百度爱采购的企业可以获得认证标识&#xff0c;这个标识是企业品牌树立的重要表现&#xff0c;在产品展示页面和百度首页搜索企业名称都有企业信息的醒目展示&#xff0c;并且可以直接跳转到企业店铺&#xff0c;为企业带来流量的同时&#xff0c;还能进行品牌的宣传。百度…

Java this关键字详解

this 关键字是 Java 常用的关键字&#xff0c;可用于任何实例方法内指向当前对象&#xff0c;也可指向对其调用当前方法的对象&#xff0c;或者在需要当前类型对象引用时使用。 this.属性名 大部分时候&#xff0c;普通方法访问其他方法、成员变量时无须使用 this 前缀&#…

zabbixdocker里的mysql_基于Docker安装与部署Zabbix

今天测试了一天的Zabbix-Docker&#xff0c;部署起来确实方便&#xff0c;就需要在安装了Docker的linux系统中输入以下命令就可以了。1.安装MysqL数据库,启动一个空的MysqL服务器实例docker run Cname zabbix-DB -t \-e MysqL_DATABASE”zabbix” \-e MysqL_USER”zabbix” \-e…

Java创建对象详解

对象是对类的实例化。对象具有状态和行为&#xff0c;变量用来表明对象的状态&#xff0c;方法表明对象所具有的行为。Java 对象的生命周期包括创建、使用和清除, Java 语言中创建对象分显式创建与隐含创建两种情况。 显式创建对象 对象的显式创建方式有 4 种。 1. 使用 new …

python matplotlib模块教程_Python中的Matplotlib模块入门教程

1 关于 Matplotlib 模块Matplotlib 是一个由 John Hunter 等开发的&#xff0c;用以绘制二维图形的 Python 模块。它利用了 Python 下的数值计算模块 Numeric 及 Numarray&#xff0c;克隆了许多 Matlab 中的函数&#xff0c; 用以帮助用户轻松地获得高质量的二维图形。Matplot…