00:00
那我们继续往下看啊呃,那首先这样上午呢,我们是把它的一个存储这块。存储以及生产者这块内容搞定了,那下午呢,我们就开始看那个什么。消费者啊,消费者啊,一块一块的,那消费这块呢,我们更多的就是看他的一个消费方式。和消费者组里边的一个分区分配策略,注意一定是消费者组,如果说你只请了一个消费者,假如说坚定了一个主题的话,那就没有什么。这个分区分配了所有的分区,只能给一个人能听懂,对吧?啊,他有组才有这个概念啊,才有这个概念,那我们看一下,呃,第一个就是消费方式的一个问题,其实我们之前都说过了,对吧,它是采用那个什么。拉取的一个模式,从博克里边也是卡布卡集群里边呢,来获取这个数据的啊,因为推这个模式呢,说我们所说的很难适用。不同的消费者,因为你推的速度也要保持一致,但是拉取模式的也有不足,对吧,我们说了,如果你这个消费数据已经消费完了。
01:07
没有新数据了,它是不是长时间有个空轮循啊,对吧?啊,一直陷入循环,一直返回这个空数据啊,一直返回这个空数据啊,是这个意思,然后这里面呢,卡不还考虑到一个点,它是这样的,呃,在消费数据的时候呢,我们可以传一个参考时间。啊,采用时间,这个时间干什么用呢,如果说。此时返回了一个空数据,就没有拿到数据,那接下来我要等待这么长时间之后再去干什么?拉取,再去拉取啊,稍微等一会儿,这样就显得无限循环当中啊,循环它的一个本身拉取的速度非常快的,这个数据一处理完,立马去获取下一条数据。啊,处理完了立马就获取,但是这样有可能就是到我们说的资源太过于浪费了。啊太会浪费,所以呢,他考虑到这个点之后,因为之前他也不是说。之前的真理处理完了啊,你先去拉取数据对吧?啊,先拉取数据,然后处理,处理完了拉取什么新的数据,现在呢,你拉取数据之后,发现它这一个空的,空的之后,它中间也间隔一定的时间再去拉取下一次,这个能理解吧啊就防止它拉取的速度太过于频繁了,因为它本身就是空转,一直是一个空的啊,所以呢,但是如果说你有数据的话,这个时间其实是不学效的啊,当我们写代码的时候能看到啊,我们要传一个参数进去啊,我们传个参数进去啊呃,这个呢,其实消费方式呢,我们之前已经提到过了啊,就是对比的那个整个的。
02:36
模式这块对吧,两种模式这块就已经讲过了这个点,然后接下来我们聊一下它的一个分区分配策略的一个问题。这个前提条件就在这儿。他说,一个组里边有多个消费者。然后同时一个主题里边又有多个分区。啊,所以会涉及到我们分区的一个分配问题。
03:01
也就是说你哪个给哪个啊,就是哪个分区给哪个消费者这样的,因为我们之前说过一句话,就是说同一个消费者组里边的不同消费者怎么样。不能同时消费同一个分区,那也就是说你可以同时消费一个主题,他说不能同时消费一个分区吧,也就是说它能够同时是能。消费一个主题啊,同时能消费一个主题,OK,那同时消费一个主题多个分区,那分区总有一个分配规则,对吧,分配规则OK,那这里面呢,有两个。一个轮询,一个认证范围啊,一个范围,那我们看一下这个东西怎么来的啊,轮询很简单吧。轮学很简单的,也就是说假如说现在三个消费者七个分区吧。七个分区啊,零到六,零到六七个分区,那正常的就是这样来的。对吧,啊,它是这样走的轮询嘛,啊,轮询第一个会多一些啊,第一个会多一些,就这意思,好还有一个问题就在于这七个分区啊,我们看到的应该是一个主题里面的,对吧,但是其实更多的在生产环境当中啊,有可能我们消费者同时消费T1跟T22个主题。
04:18
可以订阅多个主题啊,可以订阅多个主题,这是可以的,就类似于你手机订阅公众号,可以订阅多个吧,对吧,这块呢,他也能够同时消费多个主题的数据,好,那这个大家比较好理一点点,因为零到六来自于什么。一个主题,然后轮询的话,那你只能把这个去分配一下吧,好,那在这个当中呢,如果说我们看到的是多个啊,举个例子就是说第一。这个是T2。啊,这个T2这里面呢,有三个分区。这里面呢有三个分区,然后呢,我有一个消费者组。消费者组里边有AB。
05:04
有两个消费者。那这个东西就涉及到两种情况。他到底是把这个当做一个整体。还是说来分开吧。对吧,在这个我们所看到的这个red Robin里边。啊,Robin轮询的这种策略里边,它是将两个主题当做一个整体来看的。他会先把你里边的东西,它里边有一个类叫这个名字。Topic and partition。这个类一个构造方法很简单,成两个东西,一个主题名字,一个分区。一个分区啊,这个类呢,有个对象对吧,那这里边假如说有这个类,它里面有几个对象。第一题二加在一块有六个吧,啊有六个好,它根据它的哈希值。
06:00
根据这六个对象含义值,将这六个对象呢排个序。啊会排序啊,不是说我们刚才看到说012这样这样做的啊,它在里边呢,按照这个对象进行了一个排序啊,取到它这个哈一值来做了一个排序,排完序之后假设这个内容是。T12,然后T21,然后T2什么零总有一个顺序对吧,假设它排出来的是这个效果,然后接下来他把这个当做整体之后去做。允许。啊,去做雷群是这个意思啊,去做雷群这样的。啊,他把整体也就是说轮询的这种策略当中呢,他把你当前这个消费者组里面的所有的什么。主题,今天的主题当做一个整体来考虑。啊,当做一个整体,那这个会有什么问题。
07:01
这个好处在于多个消费者之间,它的差值。最多差几个消费的分区。最多差一个对吧?啊,最多差一个,因为轮询嘛,最多差一个,但是它有什么坏处啊,就刚才我们所说的,他当做一个整体来考虑,有什么坏处。这样这样,因为它是当做一个整体啊,刚才我们看到的我画的图是个第一天两个主题,其实你订阅的时候可以这样订阅啊,假设,但是这种条件比较少啊,比较少,呃,这样第一。T2,哎,不是这个T2,放这吧,T3。这三个人呢,都是三个分区。就是你写代码的时候可以写出来这样的代码就什么呢?我这同样的还是A和B。两个消费者,我这个大框框代表一个组可以吧,啊,如果说不是同一个组,那就没得聊这个什么分区分析策略,我A订阅的是他。
08:07
我必订阅的他。写代码上写的出来的。就这种情况,我们刚才说了,在red Robin底下,它是把它当做什么?一个整体,那这个问题就来了,如果此时你把T1 T2、T3当做一个整体轮轮群的话,会发生什么情况?是不是很有可能把T1的发给了B?把T3的发给了A,是不是有可能啊,这就不对了吧?啊,这就不对了,那像这种情况比较少啊,就是我们所说的,因为这个最后你AB这个都不好处理了,但是这种情况还是有的来。T1主题T2主题012012。我干什么事呢?AB2个组。我这种消费。这个总有吧,我用的是同一个组名,但是呢,A小米T1,我B小米T2。
09:06
我给消费,第二我这样消费。那这个时候我们把它把它当做一个整体,是不是TR的数据给他了,给他了这就不对的,就不符合你业务逻辑啊,不符合业务逻辑,所以呢,他这个东西你要使用的话,有一个前提条件。就是你要保证你当前这个消费者组里边,消费者订阅的主题是什么,是一样的,大家都一样的,你才能用这个,所以默认的它不是这种,因为如果默认的设置为这种的话,它根本系多维系统,他不知道你将来订阅的主题是不是一样的,所以默认的不是这个,默认的是我们下面这个。默认的是这种策略啊,默认的是这种策略,那这种策略叫认,首先有一个很好的前提,就是我们所说的,它是按照单个主题来分的。他不是按照消费者组整个的内容,也就是说只要。
10:00
我提这个主题被你同一个组里边多个消费者,消费者,那我就针对于当前的主题来进行什么。划分啊,当前的主题,那它是通过range的,Range怎么来呢?画范围,它不是七嘛,七除以三除不进嘛,啊前面多后面少。一个范围一个范围的给到。一个范围一个范围来给的啊,但是这种呢,会有另外的一个问题啊,但是这种就是。他有什么问题啊。就这种策略,底下有什么问题大家想不出来吗?有的多有的少啊啊有同学能体会到,因为它是按主题分的,来看一下这种情况,还是我们所说的T1主题0123个分区,第二主题0123个分区,然后同样的给AB2个人消费。啊,这个时候呢,我采用的是range。采用的range,那range的话是不是我们所说的它当做一个整体考虑,它单独的当做一个整体考虑吧,它当做整体考虑的三除以二,除非定零,一给他,二给他,他就是一样的是吧。
11:11
那这个他们之间有差距就是。二了吧,啊,你随着订阅的主题数在增多的时候,是不是差距越来越大呀,啊差距越来越大,就是这个意思啊,他呢,可能会带来你消费者这边消费者数据不对等的问题。啊,不对等的问题,两个呢,就是具体的你要选哪一种,看你具体的业务场景嘛,假如说类似的你这个当前这个消费者A,你A消费第一,B消费T2,你只能用这个。因为你T1是全部要给A的,T2全部要给B的,是不是要按照主题来划分它的一个什么。分区啊,但是如果说你AB此时T1T2。你都订阅了。对吧,那我们就可以选用什么。轮询的方式,因为这种呢,可以尽量的将我们分区更均匀的分配到给我们消费者,能理解这个事啊,但是呢,默认的是range啊,默认的是range啊,是这种方式啊,我可以找一下啊,可以找一下呃,默认值在这个地方,我们搜一下那个参数呢,也比较长。
12:22
0.1对吧,啊,还是看我们的这个文档。等待他刷新完成,要不然他没刷新完的话,他不全,这地方都没全啊,你现在搜也搜不到。诶,到了下午这个网怎么变差了,感觉上午还。真的这这刷不出来了。就到这儿,这肯定搜不到东西的,一回就出来一格。肯定联网,没联网这个东西怎么能出来。二。那回头我们来看一下吧,因为这个现在确实确实有问题了,OK,你看刚才是六七发一个一个弹吧,这个等到什么时候去啊,先这样啊,到时候就先刷着我们记一下,就是这里面呢,默认的是一个range,它有两种啊,前提要注意。
13:13
这种呢,是按照什么。组来分的range呢,它是按照主题来划分的啊,主题来划分的啊,主题划分的这个要注意一下啊,这个要注意下Robin啊啊range。两种,还有一个问题就是说,那什么时候会用到这个策略呢?那这个策略放在这儿,就是我们所说的,它调用什么这个对象的什么哈希值去排序,排完序之后发送给不同的一个消费者。那。这个方法大概大家猜一下,大概在什么时候去掉呢?
14:01
也就是说什么时候会去触发这个策略的一个执行呢。嗯,什么时候会触发他这个执行呢?大家想一想这个问题。对吧,那它是一个策略,那策略就是一个方法嘛,对吧,我们写的写好的一个方法,然后呢,要用到它的时候,直接就掉了一个方法,那大概在什么时候会就又用到一个方法。也就是说他触发时机大概是什么时候。当消费者什么?志愿。那这样我一个主题单独的放在我创建这个主题,我往主题里边发数据的时候,它会有这个要用到这个内容。那肯定是你启动消费者的时候吧。
15:00
对吧,肯定是在你启动消费者的时候,这个有没有问题。对吧,好,那接下来我们第一次启动消费者的时候,假如说先启动,而且你消费者可以同时起,但是我们一个一个的起的时候呢。就是有五个,假如说这个主题有六个分区,我先起了一个消费者,他一个人工作的时候,是不是六个分区都给他。我进来一个呢。我又添加一个进来,消费者进来的时候呢。这个新进来的什么拿拿不到,还是那个六个分区都给他吗?不是吧,重新分配啊,要重新分配啊,这个时候要重新分配好,假如说分配完了啊,已经加到第三个了,假如说完我们按照是RANGE01给的是A啊,二三给的是B,四五给的是C,好那现在如果说C这个消费者挂掉了呢。我不消费了吗?
16:03
是不是应该要重新分配啊,对吧,那你看啊,这个重新分配,还有我们刚才所说的添加和减少消费者个数的时候,都要触发他这个什么。重新分配啊,都要触发它的一个重新分配,这这要注意一下,也就是说这个什么时候会触发呢?一句话啊,就是当消费者里边的消费者个数发生变化的时候。发生变化,包括我们所说的什么增多和减少,都会触发他的一个改变,啊等会呢,我们底下会有这个消费者组织一个案例,大家就能看到实际这个效果,而且大家要思考的一个问题是这样,我有三个分区。我从开A的时候,是不是A消费三个分区,这个没有问题吧。我看B的时候,按照按照轮询也好,按照认也好,是A,假如说两个B一个啊,假如说它分配成这样,总有一个两个一个一个对吧,因为三个嘛,无论是哪一种情况,是不是都是这样啊,那接下来我得到了第三个是不是一人一个。
17:05
一人一个吧,好,一人一个之后。我再增加一个。那会怎么样?新的进来的没用是吗?跟数据量呢,跟数据量没关系啊,我们说了你数据量有有一个分支的数据量再大,他也不能同时把这个数据发给两个消费者。啊,他跟消费者呢,相当于有这种绑定关系。啊绑定关系,那大家要想的时候,就是我第四个消费者进来的时候,他会是什么情形。就是前三个不动,第四个反正就收不到数据,是不是大家这种想法。他要重新分配的。他要重新分配的,因为我之前说的那句话怎么说呢,当消费者组里边消费者个数发生变化的时候,他就要触发它的一个分区分配,测这个变化无,无论你之前是不是一一对应的关系了,我不管。
18:11
我第四个进来重新分配,有可能我第四个恰好没分配到,就有可能,有可能第四个分配到了其他的前面三个刚才有人接收数据的,此时分配不到的,有这种可能性。有这种可能性,当你增加第五个,照样是这个道理,要重新的去分配啊,重新的分配啊,这个意思也就是说他这个触发条件就比较死,当消费者组里边的消费者个数发生改变的时候,这个改变可以是增多,可以是减少,而且呢,可以包括我们刚才所说的增多到比你分期数还多的时候,照样的会重新分配,照样会重新分配啊,但是有时候你测试的时候,诶一看好像没有重新分配,是因为它分配前跟分配后恰好还是用的那三个,这是有可能的。啊,这个是有可能的啊,这个是有可能的啊,那这是我们所聊的分区分配策略啊,主要关注的就是两个点,他们所面对的一个对象不一样。
19:10
啊,一个面向主题的,一个是面向主的啊,面向组的,所以它采用的策略也一样,一个是轮询,一个是认证,啊轮询的这个呢,它可以保证我们所说的多个消费者,他不至于消费数据的时候不均衡,因为它最大差1万,你不能让人家不差,因为你怎么轮询,第三个轮询跟两个人,你不能一人1.5个吧。啊,没有这样的一个操作,所以呢,不可能是完全平均的,允许也做不到完全平均,但是他尽量的均匀,对吧,但是他有问题,就是说当你当前这个消费者组里边消费者。消费的主题不一样的时候,对吧,消费的主题不一样时候,你要当做一个整体,这就出问题了啊这个就说那个,那range呢,它能避免到这个问题,但是又带来另外一个问题,它是面向主题的,对吧,它可能会带来的问题就是我们所说的。
20:00
不均衡的问题吧,啊,不均衡的问题是这个意思,那有同学可能在想,那我用range按主题分里边轮。也一样,你想一下,里面轮询还是rain,划分都一样。你刚才我们说的是012T1对吧,第二主题012,如果说刚才我们是划分range是不是它是四个,它是两个。那你轮学你看一下。各种。还是四二吧,啊还是四,所以说面向主题的这种呢,他都会有这种问题啊,都会有这问题,这要注意一下。
我来说两句