00:00
那成这是第四章,那下面我们看一下第五章。六张的是消费者。消费者呢,啊,这都很重要啊,很重要第一个首先呢,是从整体上进行一个啊流程啊整体流程。整体流程当中,那我们这里面,嗯,先不说那个流程,我们先说什么,先说这个叫消费者主吧。啊,其实总体流程包含在这个消费者主里面啊,一般呢,建议大家直接奔消费者主就行了,呃,消费者和消费者主。你现在的体会有区别了吗?单个消费者也叫什么?也叫消费者主啊,其实它是一回事啊,你在这个代码里面,你不给他一个主ID,他也是要报错的啊,说白了一个人它也是一个主啊,有了这个概念之后,那么下面我们研究一下消费者主的初始化,以及它真正的一个消费数据流程好。那这一个初始化这块。
01:02
说实话,这块首先要选择的是一个叫coordinator。比如说呃,对你这个消费者主进行消费来管理这个事件的,那在里面这个coordinator是怎么选择呢。我选择哪台服务器的。按照group ID的哈希code的值对50进行球模啊,球模之后对应的那个分区,它在哪一个博客节点上,那么他的coordinator就负责本次这个消费者主的事务协调,对不对?嗯,好。那行,假如说我们就选定其中某一个节点之后,所有的消费者都会跟他进行一个。注册汇报工作是吧,哎说我要加入这个组,那么考那拿到这个之后,他是在这里面选择一个人作为consumer leader,那么作为consumer leader之后,他会啊这边啊这边再把所有的消息再给到他。
02:03
那他会根据这些消费者主的信息制定消费方案,消费方案有几种?默认呢?润。软肉鬓粘性,其实还有个斜作者粘性,只不过协作粘性呢,你在肉眼上看不到啊,看不出来区别啊,行,那这么几种啊,那么这么几种之后,他会把这个方案给到这个coordinator,他会怎么办?分发所有的规则给对应的节点,那大家就开始干活了,那开始干活之后,他们会这个消费者跟coin会频繁的心跳,心跳时间多久。在没有好,那什么时候我认为这个消费者已经挂了。45秒超时,那他会怎么办?再平衡再平衡一定要记住啊,这是面试和开发的重点啊,那再平衡。那好,那么还有一种处罚再平衡的条件。
03:03
也就是说消费者拉取数据处理的时间超过了五分钟之后,再拉第二批的时候,那这不好意思,你这时候已经挂掉了,退出消费者主触发再平衡,行,那这个呢是它初始化好,那么消费者组啊,初始化完毕之后,那接下来呢,就开始正式的工作,那首先呢,诶左侧这块呢,是卡法机群,右侧呢是对应的消费者组。那么他要想跟卡法集群进行交互的话,首先需要创建一个客户端对象,由他来跟这个卡法集群进行一个交互,那好,那这块呢,他在初始化的时候会要调用一个三的fe方法,那这里面初始化了大量的一个参数,这一个参数呢,就是每批次抓取的最小直节数,诶默认的是一个直接,那这个值呢,可以进行一个调整好,那还有一个就是每批拉取的最小直接数,如果没有达到,诶,那我们有一个超时时间是500毫秒,也能把数据拉回来,那再有呢,每批次拉取的最大值,诶,不能超过50兆。
04:00
这么几个参数,那这几个参数知道之后,那接下来开始真正的去调用散的方法发送请求,发送完请求之后,通过这个回调方法on success就把结果带回来了,那带回来之后这个数据放到哪里啊?哎,会放到一个队列里面,那队列里面每批次放的最大值不能超过这个上限50兆啊,一批批的往这放。那他这边拉取,那消费者呢,开始进行工作,每批次从这里面拉取500条日志进行处理,那拉过来首先经过的第一道手续就是反序列化好,那再往下呢,就是对应的拦截T,再往下就是处理代码了啊这样整个一个工作流程,那这里面有几个参数值要记住啊,第一个呢,就是每批次拉取的最小数据量呢,是一个字节,那还有呢,每批次拉取最小数据量没有达到的话,那这个超时时间,比如说500毫秒到了,那也能拉取过来一波数据啊,还有呢,最大拉取的上限呢,是50兆每批次处理的啊,这个条数是500条啊好,那这就是整个这个消费者主的一个工作流程哈。
05:06
那行,那这个消费者主的流程啊,完事之后,那下面我们到哪呢。开始创建,呃,叫按照主题进行消费是吧,按照。主题消费,那按照主题消费的步骤A。创建消费者啊,第二步呢。订阅。主题第三步,消费循环,消费数据。好,那上面呢,有对应的这个配置信息。配置信息有几个必配的项?首先要连接上集群啊,连接之后呢,反序列化,还有一个非常重要的容易出错的地方,主ID啊,主ID非常好啊,主ID这就行了,这是几个必配的项,一定要记住,那接下来呢,是这个订阅主题,那就调用那个script啊,对应的方法是吧?啊传接主题,那订阅主题时候稍微有个小细节,它能不能同时消费多个主题的数据。
06:12
可以没问题,那你说你可以放一个集合里面放的都是这个,呃,主题名称就可以了,那消费数据呢,就是按这个外部循环啊,那你要想退出外部循环,可以有一种方式,就是设置标记位,在外部呢,控制这个标记位的这个啊触和false就可以决定它消费成功还是不成功啊。呃,这是按照主题调配,那下一个还有一个就是按照。按按照分区,这呢是一些特殊场景啊,通常情况下在企业里面是主题的多一些啊,绝大多数都有主题啊,个别特殊情况是消费分区,那消费分区跟上面唯一一个区别是不是这块啊。哎,这块呢,就是哎,你要订阅的是这个啊,就assign啊assign啊是这个对应的叫啊分区那里有一个topic part还记得吗?嗯,Topic partan,每一个分区,每个主题分区啊那这个我就不做过多说明了。
07:05
呃,接下来呢,是演示的叫消费者主案例吧,消费者主案例。那这个呢,就是直接就是复制多个消费者就可以了,那他怎么能成的主呢?主要在于哪一个参数。主ID,哎,也就说你的主ID相同,它们就能够构成一个主啊,啊,那这是这块,那下面的话,我们再往下又学的对应的叫。再平衡吧啊,或者是分区分配策略以及再平衡啊。分区分配。最爱考的就是再平衡啊,这个面试官可爱考了,为啥呢,愿意考呢?因为在生产环境当中。它是太重要了,太影响这个卡法性能了啊。那么分区分配策略有这么几种,第一个,认子。第二呢,RO。
08:00
盆地。软力粘性啊,主要讲这么三种就行了啊,那好,那润呢是默认这种方式,那我们仍然以这样一个前提条件,什么前提条件呢,叫七个分区。三个消费者。好来进行一个处理,那润子的话,他会第一个,他这怎么分呢。零。Yeah。二。然后3456这样分吗?哎,你说呢,它是尽量均匀。哎,对这个分区数进行求模,除不尽的怎么办?哎,多分区,把这个低分区数多放一个,哎,但是它容易产生什么。数据倾斜啊,记住这是它的一个要命的这个点啊,数据倾斜。那下面呢,看一下这个run周壁,那run周壁呢,采用的是。轮巡那轮巡那就是零诶。零,然后一。
09:01
二啊,然后上面呢三四。五啊,然后六是这样吗?哎,这是轮许,那下边的是年性,年性的话他怎么分呢。随机并尽量的均匀,知道吗?哎,那它始终的分配规则就是你这里面应该是二。啊223啊,不管这个23里面放在谁啊,所谓的二是两个消费者,两个消费者,三个消费者,是这样吗?哎,你可以随机,那比如说我们假如说随机一个,那它呢是零,嗯三四,那这个呢是二。六那下一个谁一五对吧?哎,家长尽量一个随机就可以了,那么这是正常在企业当中的一个分配,那么大家最怕的就叫一个再平衡,那来回顾一下润子再平衡的时候,45秒以内他会怎么处理,比如说他挂了。怎么办?
10:02
他会全部给到其中一个消费者,是这样吗?嗯,好,那么45秒以后再重启的话,是不是就按照润子进行进行分配啊嗯,好,那下面是专周币,那比如说他挂了,他会怎么分45秒以内。把036轮询再分配给对应的其他两个消费者,知道吗?OK,好。那么如果40秒以后呢,那是不是就重新按照轮巡的规规则重新来了,那粘性的话呢,他挂了怎么办?按照粘性的尽量均匀是吧,啊把这个034应该会打散成,呃两个一个是吧,两个消费者和一个消费者啊,给到这个下面这两个啊就OK了,行,那这个就是这个规则啊。
11:07
嗯。就是topic与topic之间会不会有影响,是这意思吧?嗯,大家猜会不会有影响?啊,不会啊,因为咱这叫什么。分区分配策略对吧,已经到达了分区这个力度,那么他不会考虑这个主题的力度,主题与主题之间是完全独立的啊,一定要记住这点啊。他不,他这个轮询的点是那个,就是第一个位置,他不是那个低分区。它的排序规则是按照哈希扣的值。啊,跟你那个不太一样啊对。好,那下面往下看啊。呃,那我们到哪儿了?到了是吧。好看啊。Upset,首先upset默认存储在哪里?
12:01
对,默认存储在系统主题。以前存在哪里,0.9之前。哎,主kper,那存储在主K里面有什么不好。其实这样的啊,你要存在这个系统,呃,存在这个JK里面,因为卡卡里面它有N多个分区,N多个消费者,那每一个人都要跟这个主皮片进行操作的时候,你会导致这个主片非常非常忙碌啊,而且它的性能扛不住太多的这个请求,那这样的话呢,就这个效率呢,非常非常低下,后来呢,就考虑说啊,自己来消费,自己来维护啊,这样要好一些啊。主要是通讯网络上的一个压力,那么之后呢是up,那up第一个叫自动提交。自动提交有一个什么呢?提交的时间默认多少?15秒钟啊啊,15秒钟提交一次。
13:00
那好,那下面呢,还有一个叫手动交。手动提交分为同步和异步。OK,那么主要是用户自己来维护,你消费完数据之后,你手动呢,进行一个啊提交就可以了,默认的是这个自动啊默认。行。那再往下,下面呢,是有一个叫。指定位置进行一个消费,指定奥赛。这些呢,都属于大数据运维相关的一些操作啊,就是在市场环境当中出现一些意外,那你能不能处理掉,那这个呢,其实是非常呃涨你的印象分了。比如说公司遇到一些困难的时候,你第一时间冲上去咔咔搞定对不对?比如说你同事仓库了,那你去了之后搞定,那你想想你在公司的这个地位,那就直线上升是吧?那反过来你是那个商铺的人,那就够呛了。
14:03
那指定offet这个消费呢,啊,主要的是这个这方法是吧,这指定这个off的位置,就是哪一个主题,嗯,然后对应的这个嗯,Off。那这个呢,呃,就按照咱们上课讲的那个进行一个处理就行了,那这里面有个小细节就是。如果直接指定他不行啊,需要是不是那个等他分区分完之后,是不是才能进行一个指定啊,哎,这所以说必须得循环便利,等待它分区分配好了啊之后再往下走啊。那还有一个是按照时间。这承接也是一道面试题,呃,面试官问说我们这个公司啊,呃,下午跑运行的数据呢,呃都出现了一些意外情况,我们想重新进行一个消费,嗯,再处理一波一下这波数据,那这时候问你能不能处理?啊,那这里面就调用这个,把这个时间转换成对应的。哎,然后再进行一个奥赛的一个消费啊,是这样一个原理啊。
15:01
那下面呢,还有一个叫漏消费和一个重复消费。那总之这个呃,漏消费和重复消费呢,一个就是你提前消费到数据了。哎,然后你再提赛,还有一个呢,是你提前提交了赛后消费的数据,那这种情况都有,容易产生重消费和漏消费,呃,解决的唯一办法就是。啊,你要想在企业里面做的这个非常非常精准,只能采用事务这种方式,而且还得要求你的下游的这个处理,比如说你这个肯讯猫消费,消费员给的是买色Q还是卡不卡,以及还是其他组件,那其他的组件必须得支持事务回滚,否则的话你仍然做不到精确一次性消费啊,这要注意啊,一般在生产环境当中啊,或者是面试的时候,面试官会问如何做到一个数据的精确一次性消费,那这时候呢,你在回答这种问题的时候,你要从从哪儿答?
16:02
生产端到哪呢?到集群。然后呢,是集群。啊,再到消费者,其实呢,还有一个就是消费者。到下游啊,到框架啊。这一套所有任何一个环节都不允许出现问题,任何一个环节出现问题,你都做不到精确已经消费,所以这道题呢,面试官是非常非常愿意去问的啊,因为问这个呢,就说明你对整个这个链路呢,你是非常清楚的,如果你答不出来,那对不起,就说明你这个对这个框架原理啊,各方面了解的不是那么特别透彻啊,那你们后面做这个SPA项目的时候呢,会涉及到这一点啊,提前有一个印象。那再之后呢,叫数据积压。这也是面试的一个考点,而且在生长环境当中,你们也经常遇到这种数据积压这种场景,那数据积压的最有效的办法呢,就是。增加分区。
17:00
对吧,哎,增加分区同时呢,呃,你要消这这个消费者是不是得增加对应的CPU核数,或者增加消费者个数。个数,如果再完美一点,你要匹配的是在生产端。到博克集群。这块我们有四个参数是可以提高它对应的一个存储量啊,啊四个参数。然后对应的像这个在这个消费端。消费端是不是有两个参数?一个呢是50兆,另一个呢是500条。那么可以适当的提高这两个参数,来解决对应的这个数据积压的一个问题哈。
我来说两句