00:03
好,下面呢,我们就来看这个commit log文件。文件啊,我们打开下啊,可以看一下,就在commit log目录里边。啊,这个文件,这就是这个文件啊,大家这个关于这个文件,我们一会儿详细给大家讲啊,那么这里边儿给大家先说一个概念啊。就我们这叫commit log文件是吧,呃。在我们大家看很多资料的时候啊,从网络网络上啊,或者其他的书上啊,你要学习一些资料,那么上面都说这个叫科的log文件。是吧?但是呢,从源码里边。来看的话。呃,这个文件在源码里面,它叫什么叫map。所以我们后边啊,呃,我们会看到这个file文件啊,也能看到这个computer文件,你知道这是同一个就行了,那给大家呃,简单的。
01:09
写个。说明啊。就是呃,在很多。资料中。嗯。目录中的。文件。呃,简单就称为。Commit log文件。但在源码中。该文件。被命名为。所以我们就是后边这个map啊,和我们commit log啊,你知道是同一个文件就行了。首学们看啊,说这目录里边存放着很多map file文件,哎,就是我们刚才看到的啊,这这个这个这个里边啊,会有很多啊,我们现在就一个。
02:10
是吧?它是干嘛的呢?当前博中所有消息都是落盘到这些map文件中的,也就是我们消息真正写是写到哪了?是写到了,慢慢发表文件。驱动文件,那意味着什么?意味着我们不是之前说这个。我们的消息是写在Q队列里边的吗?你现在说这个消息写在map file,那是不是说这个队列就在map里边呢?不是你注意啊,可不是这样的,那那那那那不就错了吗?我们之前不是说的是错了,没有错啊。呃,你先要知道我们的消息啊,真正我们的消息是写在map文件里边的。至于那个Q啊,我们后边专门会讲这个,呃,Consume q我会专门讲的啊,那那的文件大小是1G。
03:09
你注意啊,这个大小是一个默认大小,是指的它的最大值是依据,也就是说这个文件啊,它它它是呃。小于等于。1G的。小于等于1G的什么意思呢?那我们的消息啊,大家看。呃,这个是这个这个文件里边内部的结构啊,这。啊,一行成为一个消息单元。这一行有消的啊,就相当于一一条消息,就是它会有一行啊,那肯定有大小啊,这body是什么?是我们具体的消息,因为。你具体的消息不一样,所以会导致什么,导致我们每一个消息单元,单元它实际上大小是不一样的。明白吧,它大小是不一样的啊。
04:00
呃,那这就有一个问题,就你一记啊。一记恰好是。这个。能放下啊,就最后一个啊,最。我们这是一个啊market文件啊,前面放了很多啊,很多消息啊,消息单元是吧,到最后最后这的时候,这这这这前面都放着消息的啊。这是空余的,那最后空余的这块地,他一定能放下。一条新的消息吗?那不一定啊,如果地方不够。不够怎么办?诶,那条新的消息会写到。会写到它里边有新的文件里边,那这就会导致什么结果,而导致我们这个文件。实际大小是到这儿。在这个里边实际上是没有数据的。这是没有数据,其实没有数据意味着什么?就是不够1G,这个文件是不够1G小于。
05:04
小于G,但是你要说留在这个地儿啊,恰好能放下一个消息是吧,那那正好就是1G,所以这个1G啊,它实际上是小于等于1G的,这个大家呃,就。这个了解一下啊。然后呢,这个文件名由20位十斤数构成,大家看。这个零你可以数一下,这是20个零啊,这是20个零。要表示当前文件的第一条消息。它的,呃,起始偏量是什么意思啊,这就需要给大家解释一下。表示当前文件的第一条消息的起始偏移量。这偏量是这样啊。大家看啊。这是。
06:01
大家看这啊,看这,我给这儿画画个图,呃,这是一个。Not fail。这是一个。这是一个,这是一啊,就假设这四个啊。这四个慢大家需要注意一点,我们一会儿能看到啊,文件内部的消息,就那消息单元它的存储啊。是顺序写入的。是顺序。也就是说他们的。他们的这个这个地址啊,是连续的。但是ma三角和max三角之间。那地址不一定是连续的啊。这也一样,这这这之间地址不一定连续,这是我们需要注意的。那么。这如果这是第一个,或者说第零个。假设这第零个,这是第一个第二个第三个是吧。那么。
07:00
这个文件啊,它第一条消息。假设这是第一条消息。那么这第一条消息它的偏移量offset。Offset啊,我就不写了啊,Offset是什么?就是零。它是零。然后这条消息假设占了多少字节。假象啊,降了这个。一下同学。他占了一兆字节。那第二条消息。它的偏移量就是这个位置。是什么?就一兆。这就一兆啊,这是零,这是一兆,假设它是,呃,这个它的大小啊,呃是是是是,比如说呃,0.5兆,假设啊,那第三条消息。
08:02
第三条消息。那这这个偏移量是多少,是1.5兆。对吧,这1.5兆,因为这个是一兆,这0.5兆,这就是1.5兆。依次往下排,排排排到这儿是吧,排到这儿以后啊,大家看。这假设是最后一条消息。最后一条线,假设在这后边剩的这个位置他就放不下,对吧,假设这个是多少呢啊。这个这个。前面啊一共,呃,咱们说零点假设啊,就是1G嘛,0.97G。0.977是吧。0.97G,当然这个零点几G,这个这个是这条消息的便宜量,假设这条消息呃是0.01G的话。那意味着什么啊,实际上这个位置是0.298几。
09:03
对吧,这个位置是0.98几啊,但我们就不关心这个位置了,我们现在关心的是这个消息的偏移量,实际上是0.97G,对吧。那下一条,这条消息的下一条消息。是就盖到它里边了。对不对,从这开始。从这开始假设这条消息啊,是多少是这个。呃,刚才不是说了,呃,是是是是呃。这是0.10.01G啊,0.01G,所以大家注意啊。这样。偏移量是多少?是零点。九八几?是0.98几,为什么前面一共有0.98,诶,不到这儿吗?这不0.98吗?是吧,前面这一共是0.98。
10:02
所以这个偏移量就是0.98G。然后再依次往下,你看你你这个是多大是吧,然后加上这个大小就是它。所以从这就可以告诉大家一点啊,是什么东西呢?就是整个这个叫偏音量off set啊。它是什么?它是连续的。但是这个东西不是物理地址。你不要把它认为物理有又有哥们说,哎老雷不对吧,哎,你这这不是刚才还说了,这是不连续吗?不连续是物理地质不连续,这个是逻辑偏移量。从零,这是从零开始记记的。明白吧,那你说真正的内存地址表,这这可能是零吗?不可能啊。对吧,所以它这个偏移量啊,是从这儿开始,都是相对于它的一个偏移量。是连续记的。啊。
11:03
呃,这是我们。然后呢,这说了啊,表示当前文件的第一条消息的起始A篇量,也就是说我们这个文件名是什么。是刚才我们画那个图里边对吧,刚才我们画那个图啊,这么多文件啊,这么多文件总有第一条嘛。第一条消息它的偏移量啊,这个偏移量是。是零,所以这个文件整个文件名是不是20个零,然后这个是0.97G是吧,0.97G啊,呃,不是0.98G,那你把0.98G你给它换成成啊这个。十进制,然后给它放到这,这就这个文件名,所以你看它的文件名是什么,就是这条消息它的偏移量,这个偏移量都是相对于谁的,这是零,从零开始的。明白吧?
12:01
啊,这所以啊。嗯。这个这个这个,所以这里边儿我们简单给大家写的稍微详细一些吧,就是呃。第一个。文件名啊,一定是呃。20位,零。造成的。对吧,为什么啊,因为啊第一个文件。的第一条消息的。呃,这个这个偏移量啊,这个偏移量叫什么?大家注意,这个偏移量叫commit offset叫commit啊offset。因为第一第一个文件的第一条消息的这个。嗯。这个这个这个。先。天一亮。
13:03
Offset。嗯,为零,那它的是零对吧。那我们再再举个例子啊,呃,比如说我们这个文件啊满了。第一个文件,呃呃,这个这个这个。放放满放满时。嗯,会,嗯。生成。自动生成啊。会自动自动生成。生成。嗯,第二个。文件。嗯,继续存放。消息是吧。呃。那他的文件名。嗯,文件名,嗯。
14:00
咱们假设吧,假设第一个文件。第一个文件,呃。大小是。是多少呢?这不是1G吗?嗯。怎么?算个数吧。来算个数,1024。1024。呃,就是K照在乘1024。就这。复制。这个数啊啊,咱们假设啊,让他减减减去一个。嗯。
15:00
呃,是这这么多,呃。之间。降到自己啊,然后。我我把这样的,把这个改成零。诶,比他稍稍小一点吧。是吧,我说给它改成零了啊,假设这个文件大小是你最后你放完以后,这就剩四个字节,你肯定放不了下一条啊,所以。呃,所以它这个大小就就这么大是吧。假设第一个文件大小是是这么多自己。的意义。二个文件名。就是是多少。大家数一下啊,一二三四五六七八九十。十是吧,再补是个零一二三四零一二十。
16:04
这就是。这就是第二个文件名。这就是第二个文件名。明白吧,所以你说呃,这个这个。呃。D。三个咱不要说第三个了,咱们以此类推吧。啊,一。是。类推。嗯。D。N个文件。Yeah。嗯,应该。是是什么?呃,实际上是。前。N减一。文件。大小。之后。对不对,前N。
17:00
前N减一个文件大小之和。对不对,这就是这个门店名,所以这个这个大家就是需要需要大家知道啊,再写上一句话吧,就是呃。第一个。中。啊,所有。呃,叫。嗯。Map的。Commit log。Off下。呃,是是。嗯。连续。是连续的。它是连续的啊。OK,先存一份吧。
我来说两句