00:02
好,下面呢,我们来看这个broker。嗯,先看一下整体啊,这broke其实很简单啊,就是说起来很简单啊,实际上是最核心的东西,呃,它就是干嘛的,存储我们的消息的是吧,我们看博克充当着消息中转。角色。啊,负责存储消息,转发消息。然后博在热康Q啊,系统里边负责。接收并存储从生日者发来的消息,就你生日者发过来消息存到哪,存到我这儿啊,我这个broker这是吧,同时为消费者的拉取请求做准备。啊,做些什么准备呢?最重要的一个准备啊,就是这个偏移量ET啊,记录这个东西。博克同时存储着呃,消息相关的原数据,就是除了消息以外啊,呃,这些数据啊,称为原数据啊。
01:02
嗯,就是为了什么,为了,呃,为这些消息的存储和。呃,这个这个消费啊,提供服务的啊,这些数据称为原数据,包括。消费者主消费进度偏移,Offset就偏移量,因为你这次消费到哪了,我得记下来,下一次是从这个位置开始消费,对吧,包括我们前面说的主题呀,呃,队列呀。这些数据啊,在都在broker里边。呃,其实说到这个平移量ET啊呃,再给大家扩展一下啊呃,就是卡不卡,因为rock q是吧,它它思路源于卡卡热Q啊是呃卡卡里边啊,这个off在哪着呢。他也是在博克里边存在的,但是呢是有版本的,是在卡普卡0.8版本以后,就是0.9啊,0.9往后的这些版本是offset啊,是存在于卡普卡的这个这个这个呃,Proer里边的。
02:14
呃,在这个。0.8以前版本。实际上是存在就keepper里边的,把这个作为一个扩展啊,嗯,你了解一下。卡不卡,呃。0.8。版本。之后不包含0.8啊。呃,这个这个啊。啊,是。存放在。Rocker。不中的。嗯。之前版本。是。存放。
03:00
对。做里边的啊,这是大家了解一下啊,咱们一直在讲一直和卡不卡做一个对比,因为嗯,咱们学这一个东西啊,你说一个是学习他怎么用是吧,原理另外一个面试,面试很多东西都是综合性的是吧,对比呢,对不对啊OK,那么我们下边啊深后再看一下这个brokeer啊,它有哪些。呃,模块构成的。首先啊,大家看请求过来以后由谁用moting model啊,远程模块由他来梳理,其实这个远程模块啊是谁,就是我们整个这个博。你看是整个博克实体啊,整个博克实体呃,负责处理来自clients端的请求,呃,然后他有下边的几个模块构成。这个先说啊manager啊,客户端管理器他是干嘛的,一看名字就知道管理客户端的是吧。
04:06
呃,负责接收,然后解析客户端,客户端是指的什么,我们的生产者消费者。啊,这些请求啊,然后呢,管理客户端。什么管理客户端,比如说例如啊维护consumer它的topic订阅消息,因为我们consumer啊是需要订阅哪个主题的消息的,对不对啊维护这个订阅消息,当然除了主题以外,我们再说的深一些,就是还有tag对吧,你订阅哪个主题的哪个tag它的消息啊一级分类二级分类对吧?然后呢,就是我们这个store啊store service啊存储服务,提供存储服务的是吧。那不是存储服务吗?在这干嘛啊?提供方便简单的API接口,处理什么消息存储到物理硬盘和消息查询,主要是提供这两个,一个是存储,一个是查询。
05:03
提供相关的这些API的啊,第三个ha一看ha啊就是。High available啊,高可用啊服务提供高可用服务的,呃,这是提供master啊,Brokeer和slaveer之间数据的同步功能,这个关于这个master和slaveer啊,呃,我们一会说这个集群部署的时候,给大家再详细来说,就先你知道啊,这个是。高可用服务啊,是什么master和slave之间属于同步用的啊,然后这还有一个什么index service索引服务。所以服务什么呀啊,根据特定的message key message key啊,我们在前面讲这个基本概念的时候,我们说了消息标识是不是有三种。其中有一个是KK,是由用户指定的业务相关的V的标识。啊,那我们这里边儿。
06:03
这个index index service是根据特定的message key。就这个key。啊,用户指定的key,然后呢,对投递到博客的消息进行索引。在线进行索引,同时也提供了根据ma key呃对消息进行快速查询的功能。就是你。Producer,你生产者把消息传过来是吧,传过来以后我这样。实际上这里边啊,简单来说,简单来说啊,呃,这里边儿就是根据这个K它的哈希值。简单来说啊,根据K这个哈值,然后呢,我呃取模。而找到相应的Q。找到相应的Q就给它放进去了。做这个工作的啊,简单来说是这样的啊,呃,包括这儿你消费也一样,你消费哪个啊,它也是这样的,跟你这个K啊来查找。
07:06
这是index,当然还包括一些其他的模块啊,官方呃,图里边没有给我们详细说,就说明这几个是重要的啊。那么下面我们来看这个集群部署啊。执行部署。先来说他解决什么问题的。看在这个图里边啊,在这个图里边,我们主要就看这一块。这我们brokeer啊,Brokeer brokeer集群是吧,或者这样啊,老来给大家画个图啊,这样好理解一些,这样看这是我们的这个博ER集群啊,我我这儿啊有一个博ER。我这有一个brokeer啊,我这有一个ER,也就是说我。整体啊,我有这样的三个博客对吧,然后我消息的。这样吧。为了。
08:00
图好画啊,我这样。稍微小一些啊。这一个broke这一个。这个不是。我这是消息的生产者,这些生产者啊,我生产消息,哎,我写到了这个brokeer,你注意啊,我写到了这个ER的这个队列,这是个队列啊。这是对联啊,这这这换个颜色好看一些啊,哎,我把这个消息写到这个里边了,是吧,然后这也有个对联,我写到这个里边了。这第一个啊,你注意我第一个消息写到这儿了,第二条线写到这儿了。啊,第三条消息写在这了。对吧,这都是没问题的啊。然后第四条消息到这儿,因为我们前面说过,给大家简单的提过啊,就是它这个是负载均衡的,那默认情况下,如如果你没有指定要写到哪,它默认是负载均衡的,他会把这消息是吧,均衡的分布在这些啊这些Q上。
09:05
分布在这些Q上啊啊,他给他里边,给他里边给他里边,然后。但假我现在假设在一个里边有一个Q啊,你要是一个broke里边有多个Q。它是按照这个Q做负载均衡的。按照Q做出来,你你比如说有五个Q,它会分到这五个啊。啊,所以我假设就是啊,分到这样一个,这样一个这样一个继续在生产,继续再生产,生产很多啊。你这种做法是什么?你这种做法的目的,它能达到ha高可用吗?不能啊,它这个仅仅是。仅仅是做了一个什么工作啊,仅仅是,呃,实际上给。呃。就是做了一个负载均衡,将来我这边这个消费者在消费的时候啊,可以怎么并行消费,就我如果这是个消费者集群是吧,我我这。
10:06
我这边还有好多消费者是吧。和那个Q的意思是一样的啊,那我有多个Q,那我可以同时进行消费,主要为了什么,提高他的消费的速率。但他做不到高可用。为什么?大家想想,如果这个主机挂了。这里边儿的消息是不是就没了。是不是就丢了?对不对,这就丢了呀,所以怎么办呢。啊,我得我得来个备份啊,哎,这时候啊,我在这儿。这不是一个吗,我给你。再建一个备份集。这个我也给你建一个备份。这个也给你建一个备份。也就是说你你这个消息啊,发到这儿以后,它会给它同步到这个里边,哎呀,有这个队列同步到它里边啊,你发送到这儿以后,诶。
11:04
哎,我给你下一同步到这。哎,你过来,哎,然后我消息就就就写到他里边,他给你同步到这儿是吧。如果说我刚才说了,如果这个机器挂。那么马上这个机器就起来了。因为数据没有丢啊。对不对。在这个里边,大家看一下这是一个什么。这就是一个集群。这又是一个集群。这又。这又是一个集群,这是不是有三个集群,在这三个集群里边,这个红色的这个啊是什么?是master就是slave。啊,这是must。啊,这是四类。Jerry master master。那么通常情况下,我们消费者在消费数据的时候,我们生产者在生产数据的时候都是直接啊啊或者这样说吧,我们生产数据的时候啊,就写的时候,我们写到哪了,写到了啊,我们的这个这个master里边。
12:15
写到了master里边,然后呢,消费数据的时候。啊,我们消费数据的时候,嗯,这个这个slave里边数据也是可以消费的。也是可以消费的啊。呃。所以这里边儿。这里边啊,Master负责处理啊,读写操作请求,而slave仅负责。这个读操作请求,呃,不过这句话啊,其实。嗯。这句话其实。这句话其实也不对。这句话其实也不对啊,为什么这样说啊,Master负责读写,操作情是没问题的,Slave啊,其实他也会负责读写,但是在在什么时候,在master挂了以后。
13:10
在master挂了以后啊,他负责这个读写。也就是说我们平常操作的时候都是操作不操作slave。把这句话去掉。Master负责啊读写操作请求,然后呢。Slave。负责对。嗯。Master中的数据。进行。对吧,啊,当然你你你那个master如果挂了slave啊,他就就就就起来了是吧啊。当。Master。挂掉了啊。
14:00
Seven。嗯。的会。自动。切换。去工作。对吧,所以。呃。呃,这个。Worker集群。是什么是主?我问问大家是主从集群还是主?主备集群是主从还是主?主备啊,这主备集群。它是主备集群啊呃,主从和主备我相信咱们大家都能够区分开呃。主备,集群是备,平常是不工作的。呃,平常都是主在工作而。主从集群是。呃,平时主呃和虫都工作,一般他要分工。
15:06
啊一我说的一般啊,不是绝对的啊,比如说像我们的Mexico啊,这个这个读写分离集群,那Mexico的master。那他是什么?他是主,他负责写操作形式,但是读读写他都负责二,然后slave呢,只负责读操作。是不是?哎。然后这样说了啊,一个master可以包含多个slave,但一个slave只能隶属于一个master master slave的对应关系是。通过相同的什么brokeer name,就他们之间的关系怎么来的,Broke name是相同的,但broke ID是不一样的,也就是说大家看啊,在我我们这个这个里边啊,还有几个master。有几个master?大家看有两个master是吧?Broke master1 master2,那说明我整个啊集整个大的集群实际上有两个master。
16:05
而。每个每个集群。啊,节点,它又有自己的一个slave,这又是一个小的集群。对不对,这又是一个小的集群,他们俩里边数据是一样的,他们俩里边数据是一样的。对吧。那么。这两个的。ER name是相同的,这两个的ER name是相同的,但是。他们的博客ID不一样,他的broke ID是零,它的是一。T0T1,为什么master?Booker ID为零,表示它是master,非零就是。然后每个broke与name集群中的所有节点建立长连接。
17:01
啊,定时注册topic的信息。给给了,也就是我们这里边这些brokeer啊和这啊name server之间都有长连接的啊,都有长连接的,这是我们对这个博ER啊,呃,应该说就有了一定的认识了。
我来说两句