00:00
好,接下来呢,我们来看一下生产经验值分区的一个分配以及再平衡,那下面呢,我们来看一下哈。打开首先呢这是生产者啊,以及呢卡瓦集群,那接下来生产者呢把数据发送到卡瓦集群啊,消费者组呢闪亮登场,准备开始消费数据。那下面我们来看第一个问题,说呢,一个消费者组当中啊,有多个消费者,你看确实呢有多个消费者。那么一个topic呢,有多个分区组成,你看这是一个topic主题,这里面有分区零,分区一,分区二这么组成,那下面面临的问题就是每一个分区它到底应该由哪一个消费者进行一个消费呢?比如说分期零,谁俩消费合适,是他,是他还是他?是吧,哎,那这里面呢,需要一个计划啊,每一个消费者来消费某一个分区的数据。那其实啊,卡布卡呢,已经给你想好了,他默认给你准备了四种分区分别策略,分别是r run,肉B粘性和合作者粘性啊这么四种,那么如果你想改变对应的分级分配策略,哎,你就可以改变对应的这个参数值,就可以进行一个设置。
01:16
那当然了,它有自己的默认值啊,默认值呢,采用的是R加上这个协奏者粘性。那结状的粘性呢,是新特性啊,也就是说这个3.0啊,最新有的,以前呢是没有的啊,这要知道。那好,那卡普卡呢,你可以看出来,它可以同时使用多个分区分配策略的一个叠加,比如说不是说用了日志之后,其他的不能用啊,它可以两个加在一起啊,正常一个使用啊。行,那了解到这之后呢,我们稍微回顾一下消费者主的一个初始化流程。当时啊,我们说这个每一个消费者在初始化的时候都要跟这个coordinator进行汇报,说我要加入到这个消费者组当中。那之后呢?Coordinator会从消费者当中选择一个作为消费者。
02:01
那么然后呢,会把所有的信息发送给这个消费者组leader。他呢,就会根据所有的信息制定出来对应的消费方案,那这里面所谓的制定方案,就是按照这种规则进行一个分期分配。啊,当然了,除了这些之外呢,你还可以进行一个自定义啊,自定义这个分区分析策略啊也可以,当然了,在开发的时候呢,这时候用的比较少,一般都用它,哎,写好了就行了。那下面呢,把这个分区分配方案呢,发给这个coordinator啊,发给他,发给他之后,他会把所有的哎,这个方案发送给对应的coordinator,告诉他们你应该消费哪一个分区的数据,明确了具体的任务。那下面呢,有一个参数必须要记住对吧?这里呢,就是一旦通讯超时,比如说45秒,没有任何的coordinator coordinator和消费者之间的通讯,那这时候就要消费者退出触发再平衡啊,这个要注意另一个条件呢,就是消费者啊,拉取一批数据之后,他的处理时间超过了五分钟。
03:09
还没有处理完,那这个时候呢,也要触发再平衡,他会认为这个消费者啊,已经挂掉了,那挂掉之后他的任务呢,就要分配给其他的消费者进行一个完成啊。行,那从理论上了解这个之后,那下面呢,我们就来详细的介绍一下每一种分区分配策略对应的一个使用。那我们先到这儿看一下这个参数。这呢就是分区分配策略的配置参数。那就在这呢哈,你可以看一下这里面对应的类型润子run b粘性和这个合作者粘性,那它的默认值是谁呢?在这呢。看到了吗?这里面呢,有一个是认子,另一个呢,就是合作者粘性啊好。那下面我们详细来研究一下它默认的这个。
04:01
打开。打开之后呢,首先这里面呢,我们是七个分区,三个消费者啊进行一个配置。那range呢,是对每一个topic而言的,比如说每一个topic单独按照range进行分配,那首先呢,对同一个topic里面的分区按照序号进行排序,你这不七个分区吗?好,0123456给你排好。那并对消费者按照字母顺序排序,你这消费者我也会在内部给你编一个号啊,012啊。那编完号之后,那你看排序后的分区,0123456啊,C0C1C2啊。那接下来。说通过这个分区数啊,除以这个消费者数来决定每一个消费者应该消费几个分区,如果除不尽的,那排在前面的几个消费者呢,将多消费一个分区。那这个啥意思啊,大家举个案例啊,举个案例。
05:00
比如说这里面分区数我是不是七呀,那消费者呢,哎,消费者是三个好,那七除以三是不是等于二余一。那怎么分配呢,来看。那我们就这样分。你看你不是余了一个吗?余一个没出开,没出开的这一个给谁呢?给低分区的对应的这个消费者。哎,那其他人是不是都是初开了,那就其他人一人两个呗,你看。一人两个,那这样就分开了,那好,那如果我是八除以三。得二余二,那这怎么分呢?比如说我再来一个,嗯,我。我我再下面加一个吧,就这加一个,我再加一个,那再加一个的话,他是不是出不进呢?余二,那就是这个零消费者还是处理这三个,那下面这个就不一样了,那这个就得这么处理。然后下面呢,这个呢,它处理最后的两个就是这样进行一个分配啊,这就是润这种方式,那大家思考一下这个润这种方式有什么毛病吗。
06:00
啊,或者是有什么问题。如果你只针对的是一个topic而言,那这事还好对吧,你看这个消费者零,它多消费一个分区的数据,这个没啥问题。但是你想,如果我是N多个topic。比如说100个,1000个,1万个啊,或者说10万个,咱多一点。那里会出现什么问题啊?那所有多出来任务都会放到这个低分区消费者零上。那就会导致这个消费者零是不是非常非常忙碌。哎,那在大数据场景下呢,这叫什么呢?哎,这叫数据倾斜,诶它是容易产生数据倾斜的,那如果你的topic个数比较少,那这事儿没问题,如果topic个数比较多的话,那这时候呢,大家要认真的考虑是否要用R这种方式。那行,那这个已经定好了,那我把这个规则啊给它截出来。对吧,正常分配的话,我们应该是消费者零消费,这个零号分区,一号分区二分区啊,消费者一呢,消费三四啊,消费者二消费五六。
07:03
那我们往下看,那下面呢,我们来做一下这个实验啊,做一下实验,我们针对这个first的主题,把它修改为七个分区。哎,直接用命令行进行一个修改啊,那看把topic杠杠不after啊,After修改topic first,然后呢,分居数呢是七,那记住分居数通过命令行的方式是只能增加不能减少啊。那行,那再有就直接拿过来了哈,不敲了。那下面呢,就已经创建完毕了,那么下面我们查看一下啊。好,现在呢,我们就是七个分区OK吧,啊已经准备完毕,那下面呢,往下看看什么呢?准备三个消费者,三个消费者其实我们之前已经准备好了,对吧,在讲这个消费者主案例的时候,是不是已经有了,可熊猫可熊猫一可熊猫二啊在哪呢?在这呢。
08:11
就是对应的这三个啊OK了,那下面呢,我们就开始启动什么呢?启动对应的这个三个消费者,然后呢,再启动生产者往这个主题里面发送数据,看他能不能消费到对应的数据啊。那行,那我们先把三个消费者给他启动。好,三个消费者已经启动完毕之后,准备往里面发送数据,那我调这个。500个数据。的主题没问题,那下面我开始准备发送啊,右键执行。行,我发送的数据当中啊,有零号分区,一号分区,二号分区。四有看有没有三啊呃,五六有了。
09:00
三啊都有对吧,哎,01234567个分区的数据都有了,那下面我们来看一下这个消费者,三个消费者他到底是怎么消费的。打开第一个,第一个呢,这里面是012对吧?啊,那012对应的就是这个消费者啊。那下面再来看这个。他呢,消费的是四。三啊三四,那是不是对应的是这个消费者呀,那再来。打开打开之后呢,这个消费者二,那消费者就是五六,那五六对应的是它,那这里面一定要注意哈,现在呢,我这个名字啊,正好跟这个消费者主里面的名字对应上了。但是记住这只是一个名字而已啊,啊真正的话,他在底层会对他进行一个编号的啊,你有可能测试的时候你会发现,诶,他怎么消费这个三四啊,他消费这个五六啊,海哥跟你这个不一样的啊,这是有可能的啊,有可能啊跟那没关系。那行,那现在呢,就证明哎,这个润子啊,目前它确实是按照这种方式进行分的。那下面我们做一个什么实验呢?哎,我把这个。
10:01
胸膜灵,把他干掉。干掉之后,然后我们再发送数据看一看谁来帮他消费012的数据呢。能懂吗?我把他干掉,干掉之后他能正常收到数据,他能正常收到数据,但是这波数据能不能收到呢?是不是?那我们把这个清一下啊。听一下,现在呢,我就将这个消费者零干掉啊,干掉干掉之后快速的哈,在45秒以内,快速的再生成一波数据,记住我的话,在45秒以内考验你的手速的时候到了。那你看一下对应的这两个啊。呃,发送了,发送成功了,那我们来看一下,看这面五六已经收到,三四也已经收到。看下他,他说不是我已经挂掉了啊,他收不到也是012,目前还没有人帮他来进行消费,那我们要查四五秒等待一下。
11:03
为什么是四图表呢?大家猜测一下。考虑一下再平衡的条件。是不是消费者跟这个coordinator进行通讯的超时时间就是45秒,如果说45秒没有通讯的上,那么他是不是认为他退出消费者主了,那是不是他的任务由其他人来接替,你看其他人已经接替他的任务了,零号分区的数据。一号分局的数据。二号分局的数据,你看整个012,所有的任务是不是砸在了某一个消费者上面呢?哎,那再就是认知这种方式。比如说45秒之后超时了,那超时他的任务就会分配给别人,哎,是整个整体给到别人的。是这样一个过程啊,这是认知的一个策略,那好,那下面我还做一个什么实验呢,现在呢,是已经过了四五秒了,那我再次。
12:00
我再次发送一波数据。那这个时候。他应该怎么分呢?那这时候相当于这个消费者零,也是他是不是已经退出了消费者主了,你说没有他的存在了。那现在我是七个分区。那是不是应该是这里面应该是012。三啊,下面的456是不是要这样去消费啊,那我们看一看是不是这样的好吧。那走。好,那现在呢,这里面哎,01245。嗯,012345看有没有六,哎六也有都有了,有了之后来观看观看一下,那这边呢,是0123对吧?啊0123,那这个就应该是456,你看456,也就是说他会认为他已经退出了消费者组之后,那以后呢,我就开始重新对这个七个分区进行一个分配啊。
我来说两句