12_Kafka高级_文件存储

Kafka分片与索引机制详解
Kafka的分片机制按照1GB进行,每个分片包含.log数据文件和.index索引文件。.log存储实际消息,7天后过期,超过1GB将创建新文件。.index文件存储开始位置的偏移量,用于快速定位数据。通过二分查找定位索引文件,然后根据偏移量和消息大小从.log中读取数据,实现高效磁盘读写。

在这里插入图片描述
实际上能看到的就是topicName+partitionID这个文件。
这个文件下有两个东西很重要。
在这里插入图片描述
.log结尾的文件是真正存储数据的。
.index是存放索引的。
在这里插入图片描述
先看看.log文件:默认会存储7天。七天过了会把这些老的数据删除掉。
在这里插入图片描述

再server.properties配置文件种,还有一个参数:存储1G
在这里插入图片描述
在这里插入图片描述

这个log是这个在这里插入图片描述
而不是它的日志。
如果这个文件超过了1G,就会再创建一个文件。而不会再往里面放数据了。

超过1G之后,新创建一个文件,怎么命名呢?
1G的文件,存储的都是消息,怎么快速从1G数据里面定位到这个数据呢?
这个时候就有index文件起作用了。
在这里插入图片描述
segment:片段。指的是当前这个分区里面的一个片段数据。里面只存储数据hello,atguigu等等。但是怎么定位,就需要依赖index。
在这里插入图片描述
在这里插入图片描述
kafka的分片机制:分片的规则,按照1G进行分片,往log里面只放数据。
在这里插入图片描述
这些东西就是偏移量,是当前log最小的偏移量,
.index文件里面存储的东西:
假如某个分区里面形成了两个log文件,
在这里插入图片描述
index索引对应的是log文件的索引。
我们假设log文件里面有六台就存储了1G。
所以对应的是
00000000000000.index
00000000000000.log
.log里面只存储数据,但是数据被序列化了,cat看不到。
.index里面提供的是索引,存储的是开始位置的偏移量。
因为.log文件中存储的是具体的6条消息,所以index里面提供的是当前log文件对应消息的索引。是开始位置的偏移量。
在这里插入图片描述
存储的是当前6条消息的起始偏移量。
这样设计的方式可以怎么定位数据呢?
首先,比较index后缀,需要找到这个消息对应的index文件。使用二分查找法定位到index文件。定位到文件之后,就需要找到具体的消息。这里存储的是消息的起始偏移量。所以,index文件里面的每一条数据的大小都是一样的,因为他们相当于元数据,存储的是相同的内容。他们存储的内容包括,对应消息的起始偏移量和消息的大小。
在这里插入图片描述
它们的大小一样,所以可以快速的定位到某条消息的起始偏移量
hdfsIO流的分段读取:seek()

比如,现在找到了消息3这个起始偏移量而且这个消息的大小是1000B,那我们就需要定位:756-1756这段数据拿出来,就找到了第三个消息的内容。
在这里插入图片描述
1、通过二分查找找到索引文件
2、因为,在索引文件中,每条数据大小一样,扫描的话,就非常的快,就能很快地找到偏移量和对应消息的大小,然后再去log中去查找。
比我们直接去log里面找,快得多。
所以,虽然kafka把数据存储在磁盘中,但是读写速度还是很快的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值