00:00
好,接下来呢,我们来研究一下消费者主的一个初始化流程,也就是说如何将多个消费者形成一个消费者主。他怎么工作的?好,双击打开。首先呢,左侧这块呢,是对应的生产者,右侧这块是集群,那么生产者呢,把数据发送到卡法集群,接下来由这个消费者主闪亮登场。那消费者主当中有多个消费者,那他们之间如何形成主的呢?接下来先给大家介绍一个主件,叫coordinator。它呢是辅助实现消费者主的一个初始化和分区的一个分配。来看一下啊呃,这里面的每一个博节点,它都有对应的一个coordinator,有很多,每一个都有。那这里面消费者主他到底要选择哪一个coordinator辅助他来进行后续的工作呢?哎,涉及到一个选择问题啊,那C节点的选择呀,它取决于叫你这个消费者主的一个格入ID,它的哈希扣的值。
01:08
对谁呢?对这个50球膜,那首先解释一下格和ID呢,是咱们用户未来写代码的时候,手动给他的一个,哎,你可以设置的,比如说是test。哎,作为消费者主啊,T1T2T三都可以啊,任意的内容都可以,那么它的哈希code的值对50球膜,那为什么是50呢?原因是因为咱们未来存储消费者的offet会放到这么一个消费者off主题里面。那它对应的分区数是多少呢?是50。哎,是对它进行一个球膜啊,是这么来的啊,还记得我们讲事物的一个协调器吗?当时那个事故协调器是不是也是对的50驱膜啊,啊也是,当时它那个主题的分区数也是50,那如果这个分区数你修改的话,那么这个就不是50啊,比如修改成60,那这个呢,就是对60求膜哈。
02:00
啊,这都是它默认值,那往下看,那下面呢,我们来看一下这个案例啊,给大家解释一下,比如说啊,我这个主ID呢,它的哈希扣的值是一,那一对这个50求模是不是等于一啊。那等于一的话,我到底应该选择哪一个节点上的coordinator呢?是这样选的,那你这个一对应的其实就是一号分区,比如说对应的你这个主题的一号分区,那一号分区在哪一个博客上啊,比如说你看我这里面。这是对应的分区吧,零号分区,一号分区二分区。那么这个一号分区在哪一个呢?哎,正好巧了,就在这个博壳一上。那好,那么BROKE1上的对应的这个coordinator就作为这个消费者主的初始化以及分区的分配的协调者。哎,是这样意思啊,比如说看你这个的它的分区在哪一个上。就这么来的,好,那选出来对应的这个coordinator之后,那接下来它怎么工作呢。首先啊,是所有的消费者都会主动的向这个coordinator发送请求,说我要加入到这个组当中,加入到什么组啊?这不有个主ID吗?假如说我们这个主ID就是test。
03:12
那我就要加入到这个组里面去。由于他们的主ID都相同,那都会发生到这儿。那好,那他会怎么干呢?他会这样干。他会从这么多消费者当中随机选出来一个消费者ID。诶说成为他们的老大啊,那这是随机选的,比如说就选中了他,选中他之后,接下来他会把他收集到的所有的信息,每个消费者给他汇报的信息都会发给谁呢?诶都会发送给这个消费者leader。发给他,比如说他呢,是叫辅助我们进行一个消费者工作啊,那真正的把这个分配交给他了。交给他之后,他呢,要制定一个消费方案,制定什么消费方案呢。
04:00
你想你这么多消费者,我到底是他去消费零号分区,还是他去消消费零号分区啊,你是得给一个计划呀,啊还有就是比如说假如说制定计划呢,是他消费零号,我消费一号,他消费二号。是不是得形成类似于这样的一个计划,哎,不要着急,这个计划呢,是有对应的,呃,成熟的这个规则的啊,也说对应的分区分配策略,那是我们后面的一个话题啊。那总之他会制定一个计划,计划完之后,他会把计划发送给这个coordinator,发给他。发给他之后,那很显然,他是不是得把这个计划再分配给对应的消费者,你就告诉他小弟们,诶,得按照这个规则进行一个消费,这样就避免了一个冲突啊。这是正常的一套流程。那好,那下面还有一个不正常流程,什么流程呢。呃,也就说这个消费者呀,他都会定期的跟这个coordinator进行一个心跳通信,其实心跳呢,大家并不陌生,之前讲hi do的时候就有这个data no的那个心跳,那个心跳时间还记得吗?是不是也是三秒啊,哎,这里面呢,也是三秒,比如说每个消费者啊,都会三秒就要跟这个Co进行一个汇报,说我还活着啊,我还活着啊,不断的发生这种消息啊。
05:15
那么如果在45秒以内没有任何消息跟他发送,那不好意思,那这个狂点是认为这个消费者挂了。那一旦这个消费者挂了。那你这是一个消费者主,那其他的消费者是不是就得帮他把后续的任务完成啊。因为谁让你们是一个整体呢,是这样吧,啊那这样呢,就涉及到一个再平衡啊,说白了就是把这任务分给别人啊,进行一个工作。那好,那还有一种情况就是消费者处理的时间过长。比如说这是一个消费者,我从这拉取过来一批数据。我消费了五分钟。然后我还没有主动的去拉取第二批数据,那说明什么问题啊,那15说明这个消费者卡住了,你说第一批数据还没处理完,根本处理不完了。
06:06
哎,那这个时候呢,也认为他自动下线,那会把他的活分配给其他的消费者进行一个工作啊,也会触发再平衡,那这两个条件一定一定要记住哈,这是一个非常非常高频的面试题啊,而且在生产环境当中也是非常有用的。啊,因为再平衡会影响你卡不卡对应的一个性能啊。那第一个再回顾一下,第一个条件就是consumer跟这个狂通信时间超时,那超时时间就是15秒,还有一个呢,就是consumer处理拉过来的数据的时间超时了,那超时的处理时间是五分钟。这两个值呢,一定要记住哈。
我来说两句