kafka文件存储机制


前锋JAVA发展学院我想昨天分享

Kafka文件存储机制

主题

中的分区存储分配

假设实验环境中的Kafka集群只有一个代理,xxx/message-folder存储数据文件的根目录,而server.properties文件在Kafka代理中配置(参数log.dirs=xxx/message-folder )。例如,分别创建主题名称。测试的数量,分区是分区=4,副本是1

存储路径和目录规则为:xxx/logs

试验0

试验-1

试验2

试验3

在Kafka文件存储中,同一主题下有多个不同的分区,每个分区都是一个目录,分区名称规则是:主题名称+有序序列号,第一个序列号从0开始计数,最大序列号is分区数减1,分区是实际的物理概念,主题是逻辑概念。

分区中的文件存储方法

以下示意图说明了分区:

中的文件存储方法

image.php?url=0Mr1tLdVRW

每个partion(目录)相当于一个巨大的文件均匀分布到多个大小相等的段数据文件中。但是,每个段中的段文件消息的数量不一定相等。此功能可以轻松删除旧的段文件。

每个分区只需要支持顺序读写。段文件生命周期由服务器配置参数确定。

这样做的好处是它可以快速删除不必要的文件并有效提高磁盘利用率。

分区中的段文件存储结构

消息的偏移值,值为64位,20位字符的长度,没有数字用0填充。

规则:

image.php?url=0Mr1tLk78i

以图2中的段文件对为例,索引的物理结构 - 段中的数据文件对应关系如下:

image.php?url=0Mr1tL6K9l

图3的上述索引文件。图3中的元数据存储大量元数据,数据文件存储大量消息,索引文件中的元数据指向相应数据文件中消息的物理偏移地址。

消息由全局分区表示),消息的物理偏移地址为497.

从上图中可以看出,段数据文件由许多消息组成。以下描述了消息的物理结构如下:

image.php?url=0Mr1tLt56X

相关领域的含义如下:

image.php?url=0Mr1tLgjT1

按偏移量查找消息

例如,要读取offset=的消息,您需要通过以下两个步骤找到它。

第一步是找到段文件

上图是一个示例,其中.index表示第一个文件,起始偏移量(偏移量)为0.第二个文件.index的起始偏移量为=+ 1.同样,第三个文件.index的起始偏移量为=+ 1.其他后续文件是类似的,文件按起始偏移量命名和排序。只要根据偏移二进制文件找到文件列表,就可以快速找到特定文件。

offset=时,位置为.index | log

第二步是通过段文件

查找消息

第一步是找到段文件。当offset=时,index的元数据的物理位置和.log的物理偏移量依次定位,然后通过.log命令搜索,直到offset=。

从上图中,我们可以看出这一点的优势。段索引文件采用稀疏索引存储模式,减小了索引文件的大小。它可以通过mmap直接操作内存。稀疏索引为数据文件的每个相应消息设置元数据指针。它密集而密集。索引可以节省更多存储空间,但需要更多时间才能找到它。

Kafka高效的文件存储设计功能

Kafka将主题中的parition大文件分成多个小文件段。通过多个小文件段,可以方便地定期清除或删除使用过的文件并减少磁盘使用量。

索引信息可用于快速定位消息并确定响应的最大大小。

通过将所有索引元数据映射到内存,可以避免段文件的IO磁盘操作。

通过稀疏存储索引文件,可以大大减少索引文件元数据的大小。

收集报告投诉