00:03
好,下边呢,我们再来看一下对文件是如何进行读写的。嗯,大家看啊,这儿给大家又放了一个图啊,嗯。这图里边啊,12345,这里边有五条消息是吧,我现传了啊,发送消息啊,这有有有五个是吧,有五个的话。那么M1。就是你消息写到他的同时啊,也会把这个消息,哎,我发到谁发到我Q。是吧,这是。呃,它这没有标号是吧,没标号那这个就相当于我们的QID是1QID2QID0QID1QID2QID3。对吧,哎,我这个消息就写到它里边轮询方式写的。写到他这儿,然后这个消息。这个消息你看写到他了。
01:01
这消息写到他了。然后这个消息写到他了。然后这个消息写到他了。对不对,当然这是我们这个这这三条啊,是我们的。这个这个索引目录啊,索引目录啊,你像这个吧,是。我们那个commit log,呃是吧,零减零。然后L1L1啊偏移量嘛,然后L2L2L3。然后L4。是吧?呃,然后这是他的那个叫什么呀。呃。那那个大小消息的大小啊,它消息大小,其它这样写的啊,其实也没没必要这样写,因为你这个消息啊,这个消息本身就包含这个大小,它这这这个图上啊,因为这个图是从网上找的一个图啊。
02:02
呃,这个图其实没必要直接就写个MIG,呃,这个Les就行了,但这样写呢,写这也不错啊,L1把这这个大小就L1,然后这是L2减L1 L2减L1对吧,L3减L2 L3减L2对吧,也不说了啊,然后这个是他的tag,他的tag全是test。呃,那么我们看啊,消息是怎么样显露的,先看。是吧?啊,一条消息进入到博克以后,星意的以下几个过程,它最终被持久化了。啊,第一个我们根。ID获取到该消息对应索引条目。在consumer里边的写入偏移量及我们的Q。嗯,这个啊,我们大家需要首先要清楚一点。
03:03
就是我们发过来的这种消息啊,要想写入的话。首先它得能形成我们的这样的一个消息单元。而消息单元里边包含很多属性,其中有谁有QID?对,你要写入到哪个Q有QID。还有什么?还有q ofet,就是你要写到这个Q的哪一个off,你想看吧。他写到这儿。写在这个位置,不单要写到这个位置呢,其实在消息里边带的有。ID好说QID实际上是我们的生日,在发送消息的时候啊,他就已经给你指定了啊,我这个消息要发给哪个Q。因为它本身它内部啊,有负载均衡策略。啊,它会负载均衡的,已经在它本身就选好了,我要把这个消息。发送给哪个Q。这消息里边本身就带着这个。
04:03
QID呢,但是这个Q啊。这个东西。他是不知道。对吧,在发送的时候不知道,所以呢,它需要计算,怎么计算呢。哎,根据这个QID。啊,然后我获取到你你你QID来了,我就知道我啊我要写到它里边了啊,要写到它里边,比如说这个消息消息啊,我要写到它里边了。然后呢,我就找到找到他,然后获取到该消息对应索引条目。该消息对应索引条目对应索引。条目。就是索引条目,这这这这里边儿这三块就是一个索引条目啊,要在它的写有偏移量。是吧,我根据这个我找他,哎,那该写写哪该写这。因为它写到哪,具体写到哪啊,它这里边是不是有记录,哎,所以我就获取到这便宜列,也就获取到我的q of set。
05:05
只有从插件才能获取到啊是不。了,我就QI对吧,然和我们消息本身一起封装成我们的消息单元。装成消息单元了,然后把消息单元我们就写到log,诶写到它里边。同时。同时加一个通知。同时。然后形成我们的消息索引目录,就形成这样一个三块这样一个东西。然后呢,将消息所有目录分发到啊,我们相应的这个这个啊。E。他就是这样,也就说大家大家需要知道啊,这里边呃,先写到它,写到它的同时往这里边写,在消息写物的这样一个过程。
06:00
嗯。然后我们再来看一下消息的拉取。拉取啊。稍微复杂一些,稍微复杂一些是吧?当consumer来拉取消息的时候,会经历以下几个步骤,哪几个呢?嗯,获取到。呃,其要消费消息所在Q。呃,的消费偏移量offset,你注意啊,这里边儿多了一个东西叫消费偏移量。叫消费便宜量啊,Offset。然后再计算出,呃,消费消息的。呃,要消费消息的消息。Offset。消息,便宜了。变量off就是偏移量嘛,是吧,但是多了一个消息off,这是什么东西啊。
07:03
呃,给大家说这个消费便宜量啊,消费便宜量。呃,就是什么,就是我们的消费进度。简单写一下吧。就是。消费of。消费。进度就是你得记一下啊,你当前这个Q已经消费到哪了,下一次在消费的,我就从这个位置,呃,后面那个位置开始。是吧,这个。呃呃,消费到。呃。嗯,这个得有个前提啊,就是我们consumer啊,就是某一个consumer啊consumer对。社会进度肯定是某个啊,对某个。呃,Q的。消费。
08:02
即消费。就这个consumer啊,消费到该。Show。是的,第几条消息,注意它它它是什么,第几条消息啊,下面的第几条了,这个我们说比较复杂啊,他这个消费进度啊。消费复哪呢,就我们到后边。大家看呃,讲消息的消费的时候,呃会会说到啊,这个消费有消费模式,消费模式呢,像有两种,一种叫广播消费,叫集群消费。这两种消费方式,它保存的那个。消的进度位置是不一样的,简单我先说一下啊。就是广,如果是广播消费模式,它保存在哪?保存到我们的consumer端,这这个你不用现在不用管啊,我们到后边会详细给大家讲。
09:01
然后如果是集群消费模式,它会保存了我们博端,比如说。我们这里边儿是吧,我们这里边儿呃。这里边不是有个config,大家看这不是有个config目录吗?我们可以进到它里边啊。看。它里面有什么,有consumer。Jason。我cat。嗯。Consumer。Off there。大家看。这是什么?这就是记录的消费进度。这就是季度的消费进度啊呃,大家看啊,我这里边儿,因为我们这这里面就一个嘛,Topic test是吧,然后这里边会创建了啊,创建了四个。零、一、二、三四个队列。然后我们消费的时候是把他们全部消费完了。
10:01
是不是,所以各自消费到第250个,他一共消一共生产了1000条儿数据啊。一物生产1000条数据,然后他轮训方式放的各放了250个。这个如果大家看的不是很清晰的话啊,这样,嗯,老得把这个起一下。嗯,这个里边,呃。这个这个topic的多一些啊,然后消费的进度也不是很一样,所以让大家看一眼。让大家看一眼。哎。呃,我想想啊。对啊,行。进到里边,然后我们。Big对吧,然后我们cat看一下。
11:03
下边的。Consumer of。就是。大家看这里边多啊,你看我这里边儿有一个。Some topic。Some,我这个消费者啊,消费者。啊,是叫CG。推进啊,然后呢,这里边消费零一。看000,这这就没有消费是吧,零号,然后一的一二的是零,三的是一是吧。啊,然后这儿还有一个。然后是这个消费者组,他现在消费进度你看零。是8778是吧,然后这个person。啊,Person我这这这这是个这这这呃,我的topic啊,然后这个呢,是我的消费者组person group,你看06172636。
12:00
是吧,这是消费进度,你看它不一样,包括这是吧,你看这294 253 298 255。是不是,哎,这这大家一看就比较清晰了啊,就比较清晰了,呃,反正这个先了解一下就行啊,我们到后边会详细给大家再说。呃。那么这儿说了啊,计算出其要消费消息的。消息offset,这消息offset实际上怎么计算呢?很简单,就是我们的消费offet加上一就是你的消这边你你这个。消费过以后啊,这个消费消费过以后,他要记录你这个消费到哪了。那我下一个消费谁,那就是我已经消费到的,加上一就是你下一个要消费的,所以这里面实际上。消息什么?消费。
13:02
是不加一。对吧,那他们之间就有这样一种关系啊,有这样一种关系。紧接着啊,呃,Consumer。啊,发送什么拉取请求啊,拉取请求。然后呃,其中会包含需要拉取消息的呃,Q,拉取消息的Q,然后消息,然后消息的tag,对吧,你你要消费哪个呃tag。哎,这些发红,然后紧接着broke计算consumer。Q,它的q of,注意啊,这q of什么东西?就这个图里边,就在这就你。这样是吧,我要读的消息,你要先读它的索引,就你Q在这个Q里边,在偏移点先找到它索引,找到索引以后你才能去找他呀。是不是,所以我要先。
14:01
计算你Q里边的,呃,Q这Q怎么算,其实也很简单。其实很简单。这个。那还是写一下吧。这个Q。Offset。相等于谁?是不是等于我们?消息。乘以。可谁?我们前面说过,这这一个是多少,20字节吧,是八八十六加四二十嘛。24减乘以20。直接。那这个就是q of,你就找到这个这个位置了,然后从这个q of set。就从这个位置开始,往后找谁,你注意我这里还有个tag,我要查找第一个指定tag的索引目录。我要找所有目录,但是他吗,你得看看这个tag对不对,是你要要消费的那个T度不是哎。
15:06
我要找,呃,不是不是,我继续往后找,我要找第一个啊,找到他以后呢,然后。解析该所目录的前八个字节,因为我们知道前八个字节是谁,是不是它的。Commit log啊是吧,哎,我这比如说一直找他是谁是L4 L4是不是定义到这儿L4,然后这这个M5这个消息是不是就找到了。对吧。前八个字节呃,即可定位到该消息在中的commit offset。然后从中读取。呃,消息单元,把这消息单元读出来,这消息单元里面是不是就包含我们的消息,但直接把这消息单元发给我们的搞门。啊,这就是他的什么消息的一个。呃拉取过程是吧,一个写一个读。
我来说两句