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

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

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

image

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

向 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目录中的布局如下所示。

示例中第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个文件:

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

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

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

  1. kafka是存储到本地磁盘么_【漫画】Kafka是如何实现高性能的?

    宏观架构层面利用Partition实现并行处理 Kafka中每个Topic都包含一个或多个Partition,不同Partition可位于不同节点. 同时Partition在物理上对应一个本地文件夹, ...

  2. suse linux增加新磁盘分区,Virtualbox中Linux添加新磁盘并创建分区

    引言:我们常常在使用系统的时候突然发现,哎呦~~~我们的磁盘空间不够用啦!我遇到常见的就是数据库数据暴增,预留的空间没有啦,只好新添加磁盘,在VB虚拟机上就可以实现,往往苦于没有图文并茂的好资料,下面 ...

  3. Kafka数据存储概述

    Kafka这款分布式消息队列使用文件系统和操作系统的页缓存(page cache)分别存储和缓存消息,摒弃了Java的堆缓存机制,同时将随机写操作改为顺序写,再结合Zero-Copy的特性极大地改善了 ...

  4. 计算机硬盘怎么整理,w7怎么整理磁盘碎片_如何清理win7电脑磁盘碎片

    我们都知道,win7系统电脑使用久了之后,各个磁盘都会出现一定的垃圾,同时当硬盘出现坏道的时候又或者不正当的操作之后进行非法关机之后那么在电脑的磁盘中就会产生一些碎片,会影响电脑的储存.这样就会降低w ...

  5. 搞透Kafka的存储架构,看这篇就够了

    阅读本文大约需要30分钟.这篇文章干货很多,希望你可以耐心读完. 从这篇文章开始,我将对 Kafka 专项知识进行深度剖析, 今天我就来聊聊 kafka 的存储系统架构设计, 说到存储系统,大家可能对 ...

  6. Kafka文件存储机制及offset存取

    Kafka是什么 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx ...

  7. Kafka文件存储机制那些事

    Kafka是什么 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx ...

  8. Kafka整体结构图、Consumer与topic关系、Kafka消息分发、Consumer的负载均衡、Kafka文件存储机制、Kafka partition segment等(来自学习资料)

    ##1. Kafka整体结构图 Kafka名词解释和工作方式  Producer : 消息生产者,就是向kafka broker发消息的客户端.  Consumer : 消息消费者,向kafka ...

  9. Kafka的存储设计

    本文来说下 Kafka的存储选型 文章目录 概述 Kafka的存储难点是什么 Kafka的存储选型分析 存储领域的基础知识 Kafka 的存储选型考虑 Kafka 的存储设计 本文小结 概述 谈到 K ...

最新文章

  1. 仿LordPE获取PE结构
  2. python中的enumerate函数
  3. 集群,分布式,微服务的区别
  4. 於岳 linux实用教程(第2版),Linux实用教程 第2版 教学课件 ppt 作者 於岳 编著 06...
  5. 网页素材大宝库:20套精美的清爽风格图标素材
  6. (转)区别不同浏览器,CSS hack写法
  7. storm架构及原理详解
  8. 分享一些图片懒加载组件的设计思路
  9. 将UTC、EST时区的时间转化成北京时间(python)
  10. 大公司在Github的开源代码
  11. JavaScript实现在线websocket WSS测试工具 -toolfk程序员工具网
  12. 用Cat.1+GPS+蓝牙+RFID实现工卡式室内室外定位器
  13. 树莓派4b搭建个人云_用树莓派搭建私人简易网盘 2/5 树莓派4B初始设置
  14. 最全面java中的static关键字剖析
  15. LabVIEW-IMAQ/IMAQdx/图像采集
  16. 计算机技术论文 系统,计算机络技术论文论文
  17. 电子元器件搜索引擎 白嫖AD原理图符号、PCB封装和3D模型(超详细)
  18. 智慧农业解决方案-最新全套文件
  19. 关于《黑手党2:乔的冒险》无法正常进入的问题
  20. 落花有意随流水,流水无意落花逐

热门文章

  1. 如何把Win11任务栏变窄
  2. 猎豹浏览器小号窗口怎么打开 小号窗口打开方法简述
  3. win10死机频繁怎么解决
  4. java cpu io高_服务器负载过高问题分析-不是cpu高负载也不是IO负载如何处理(阿里 几乎是必考题)...
  5. mysql取消主从配置_mysql主从配置
  6. python中id函数的用法_用id函数做几个测试
  7. php高中级程序员面试题,PHP 程序员面试笔试常考面试题精讲
  8. php数组有没有类似next方法,PHP 数组current跟next用法
  9. python列表操作程序_Python入门篇(三)之列表
  10. Linux进阶之路————开机、重启和用户登录注销