00:00
好,那我们搞清楚了,它是逻辑上的概念,它是物理上的概念,那我们实际能看到的是这个part,那part底下我们最关心的有两个文件来。其中有一个大家应该猜得到是谁。这个东西我们也提过,它是存放实际数据的。它是存放index,所以大家都知道,所以但这个所干什么,怎么用的,对吧?啊那有问题了,那有问题了,OK,那我们先聊它这个点log首先呢,我们知道默认会分七天,七天过了它会给它。删掉,把这些老的数据给它删掉,还有一个点,昨天让大家看到一个参数一个G,还有印象吗?不太记得了,对吧,那我们打开看一下,说点里面。
01:01
在这个卡不卡。Com里边在这个地方点开。啊,我们找一下那个值168个小时,那个在哪在这。上面上面我知道这是168个小时。这我要的这个参数,因为168个小时没没没聊的都聊清楚了,对吧,默认是七天啊七天。他说什么东西啊。看叫log日志片段文件的一个最大的小,而且你要注意一下这个log。这个logo是这个logo不是他的日志,因为卡布卡这个东西就很奇怪,他把这个东西叫log。你后面点贝塔大家都很好理解对吧,但是他就叫点log。
02:01
啊,就叫点logo,你不符合你把框架改了对吧?啊,那没办法,人家叫点logo,所以他给我们有时候看这些东西啊,带来困难啊带来困难OK,这个呢告诉你啊,是这个内容,这个呢是一个G,你可算一下啊,再算一下,然后他说。超过这个值的时候,有一个新的log s将会被创建啊,也就是说这个文件啊,它最大的到一个G,如果有一个G了,他再来一个。他再来一个,那这个问题就来了,好,现在我们知道这个是多少个零,32个零,是六个零啊不错,无所谓的,反正全零对吧,它点log,那我新来一个,我文件叫什么名字呢。最后一个对吧,这是一个问题,还有一个问题,还有一个问题,那我这个到一个G。对吧,最大能到一个G,那我假如说他到了一个G,也就是说这个文件最大是不是一个G。
03:00
一个G里边存的我们说的都是消息那一个G文件,那我怎么快速定位到那个数据,因为我消费的时候,假如说我第一次消费到1000。就是有一个消费者消费了1000那个赛对吧,1000奥赛的应该比较小吧,但是呢,消费者挂掉了,哎,他这个生产速度比较快,到达到到一个G了,现在这个文件变得很大嘛,那我消费者是不是接着去消费的时候应该。到从一千零一开始消费啊,对吧,那我怎么。能定位到这个1001呢,因为你卡作为消息中间键,你这个速度不能慢吧,读写速度不能太慢了。啊,这个时候呢,就有我们这个什么index来起作用了,Index来起作用了两个问题,刚才我们所说对吧,当我们这个超过一个G的时候,它要产生一个新的文件,这个新的文件怎么命名的问题。第二个就是它怎么快速的定位到我想要哪条数据的问题是不是这两个对吧,那这两个搁一块,这个东西呢,叫一个segment,大家都知道是一个片段,Segment不是一个片段嘛,啊,指的是你当前这一个分区里面的一个片段数据啊,一个片段的数据,它里面的只存数据。
04:15
就是你发送的hello,他的微博我只存这些东西,而你怎么定位到就要依赖于我们当前这个index啊,当前我们index大家看一下啊,刚才这个地方呢,是我们刚才所说的这个点啊。这里面呢,一个topic对吧,分为三个分区,三个分区呢里边。Log啊,我们最关心的是这个log吧,啊这个log,这个log呢,分为很多的什么片段,片段的对应很多文件,Log index log index这个点啊好,那我们所说的生产者生产消息的时候,不断的往里面追加。啊,往里追加,为了防止logo过大,导致定位数据效率低。因为我说了,随着你数据log这个文件越来越大,那你定位它的时候是不是越来越困难,对吧?啊越来越困难,因为你找到具体一个小文件嘛,那这个时候呢,它就引入了什么。
05:07
分片和索引机制啊,它要分片,因为之前他没分片的时候,那就大家都一个文件,那更难定位了吧,所以它分片,分片的规则就是我们所说的。一个G对吧,它按一个G来切一个片,切片的同时呢,还要建立索引,因为它在点log里边只放数据,那索引里面放了什么东西呢?非要我们来看。首先我们假如说。分成了很多的片,其实大家看这个数字也能看出来,你猜一下这个是什么东西。对,他就是偏移量。变量是当前这个logo的什么?最小的那个拼音。当前这个最小的平量能听懂,不是上一个那个最塔的,对接着上一个最大的那个加一的就相当于对吧,当前我是从这个现在开始了啊,现在开始了,好,那我们来分享,那接下来我们就要聊的就是index里边到底存什么东西了,对吧?啊,Index里边到底存什么东西了,那index里边存的是索引,存的是谁的索引就不用聊了,谁的索引啊,就对应log这里边的索引,那我们看一下这个index里面存的东西就是它。
06:28
首先假如说啊,这个文件呢,某一个分区的下面,它形成了两个。Log文件啊,这两个log文件呢,是这样的六。啊,假如说我这边好画,我没有画那么大的数字了,对吧,什么17万啊等等那些东西,假如说这五这六条数据就到了什么。就到了一个G啊,一做切分吧啊一做切分啊六条就到了一个G,注意切分好,现在呢,这个里边点log里边存在着具体的消息。
07:02
它只存数据,什么爱硅谷,Hello,但是它序列化了,我们也看不懂,对吧?啊序列化了看不懂啊,那接下来他index里边其实提供的是索引。而且是指向。当前。这个位置的一个,所以。啊,它开始的那个偏移量,也就这块存的是它开始位置的一个。便宜。开始位置的一个偏移量,它这里边存的0123,你这里边不有五条六条消息吗?存着当前六条消息的起始偏移量。起始变量好,那有同学不理解了,那你这个东西啊,我定位数据,我们想一下如何定位数据,如果是这样分的。首先应该比较,假如说有多个index,是不是比较index后缀?你得找到这个消息在哪个index里面吧,因为它有零,它有六,假如说我要的是七这个消息呢。
08:02
对吧,跟五这个消息是不是不在一个文件里边啊,啊,你现在要的是三,我是不是定位的这个文件,这个没问题吧?啊,而且呢,它采用的是二分长道法定位的。二分查找定位的啊,这个很快啊,这个很快好,那接下来。他这个我们所说的定位文件啊,接下来问题就来了,你定位到文件,你找第三条消息,你是不是应该找到他。嗯。那你找到他,同样的,你这里面不有很多消息,你还不让一个一个的去找吗?对吧,注意因为它这款存的是人家那个什么。位置就是其实偏移量的位置信息吧,它并不是要什么。把人家的数据存在这儿,所以我存的只是你其实的偏移量,这个偏移量你觉得会特别大吗?不会,所以呢,它这个每一条数据啊。大小都是。
09:00
固定的。就假如说每一条规定1K,或者说1024个字节,对吧?啊,1024个字节这一条呢,每一条数据就相当于一个原数据,大家都一样,因为它里边存的东西是固定的。能听懂,好,那这个就有利于他加速查询了,因为大家大小都一样,我找哪一条消息,我是不是可以快速定位到这条数据。因为大家大大小都一样的,如果大小不一样,你能快速的找到吗?因为大小一样,我一乘,我是不是就知道当前这条消息的一个气势平音呢?你们在HDR班里边学过一个这个方法,我不知道大家还记不记得。IDFS里边IO流的一个分段读取。调用了一个C的方法,先读128兆,假如说它是那个超过128兆数据,对吧,它不是分两块嘛,假如200兆数据,前面128兆,后面是72兆,对吧,分两块,假如我自己想分块读取你第一块128兆,这个好读。
10:09
因为你从开始说读到128兆结束吧,第二款你是不是要从128兆开始,对吧,那你要用一个S。就是定位。相当于一个指针直接指到128的那个地方,那如果说告诉你这个文件大小,这个东西是固定的,那是不是可以快速定位到我们想要的数据,那既然这个数据已经定位到了,它里面存在一个核心的内容,就是这个偏移量,当然它还会存着这条消息的大小。这条消息的大小,那他就知道,假如说这条消息大小是1000。自己那接下来他去这个文件里面找的,他直接快速定位到756到哪个位置啊,1756,我只要把这段数据拿出来,是不是就你要的那个第三条想一下。对吧,他是不是比你直接扫描这个文件要快,因为当前这个文件里边每一条数据大小是不一样的。
11:07
不一样的话,你没办法,你只能从头一个一个的去读吧,去扫描能听懂。那这个时候效率就低了,因为一个这个文件是特别大的。一旦这个文件大了,你进行扫描的时候,是不是速度就会慢了,对吧,所以呢,它经过建立索引的方式,而且呢,首先第一步他要定位到这个索引,通过什么二分查找法,快速的查找当前我要的这个数据,在每个索引里边,然后再根据,由于在索引里边每一条存的数据呢,是大小是固定的,因为它存的。内容大家都一样啊,你存的只是一个偏移量,当然他为了存这个偏移量,还有文件大小,当然还有其他的一些内容,我们最关心的是这个偏移量啊,所以呢,你是一样的,既然你只要每一条数据大小一样的,那我找这条数据的速度是不是就快。能听懂这个意思吗?根据大小一做长,我就知道钢铁这个数据在哪了,好找到第三条数据之后。
12:08
找到第三条数据之后,接下来。是不是拿到这个偏移量,它不光存在这个偏移量,它同时还存在当前三这个的对应这个数据的大小,那接下来根据这两个值定位到log里边去找。啊,去找到比我们直接找这个log要快啊,所以呢,卡普塔的一个,虽然他把数据存在磁盘当中,但是它这个读写速度还是挺快的啊,还是挺快的啊,所以当中呢,存在一些东西,这个大家要理解一下啊,理解一下。
我来说两句