00:00
好,呃,我们还是继续上课对吧,然后我们先把那个昨天的内容稍微做一下简要的一个复习啊,昨天复习啊,前两天没有复习是因为。克服一天什么服务一天对吧,没没有什么可服一的一个框架都是一天的,就是一天的啊啊首先看一下那个,我们是昨天讲的主要是那个卡夫卡,那卡夫卡呢,它其实是一个消息队列,所以我们先提问一下什么是消息队列,对吧,大家都要提一下,当然这一块大家还要自己去稍微去看一看那个什么呃,MQ,什么active MQ CL MQ等等的啊消息队列因为在公司当中都有用的啊,都有用的Java那边,那面试的过程当中呢,他问到卡夫卡的时候,有可能会问到这个消息队列,稍微了解一下几个对比什么样的,你自己哎弄一张表格出来啊,现在自己把这个表格做出来之后呢,面试之前你再把它家拿出来看一看,就类似于给大家发的那个什么。端口号那种表格对吧,那个东西在面试之前就特别好用,对吧,你去去到公司在那坐着,你还可以看一看,可以看一看呢啊放在手机里边就挺方便,坐地铁呀,坐公交的时候都可以看一看。
01:09
然后是那个消息队列,那我们之前讲的消息队列,它总共是有这些个好处吧,哎,这是消息队列的优点,整个消息队列的优点,然后消息队列它本身有两种模式是不是啊,一个是那个什么点对点的,一个是订阅发布的,订阅发布的,那像这两种之间,它是不是也有各自的一个优缺点的问题啊啊优缺点你像这个点对点呢,它的优点呢,就是说速度由你自己控制。对吧,我想什么时候来获取就什么时候获取,然后获取的速度呢,我也可以自己把控自己把控,但是它有它的坏处是什么。就是说它必须有一个监控着这个队列的一个轮巡的一个什么进程在吧,哎,一直就是说它相对来说比较耗资源一点,特别是这边长时间没有数据的时候,你想想看,这个进程就监控的就空跑嘛,有数据还好对吧?哎,那你监控着就正好你就能供作上,能用得上啊,那这个发布订阅的这种模式呢。
02:11
那它这个速度就不是你客户端来决定的嘛,啊,就是谁啊。就是由你这个消息队列这边主动的推过去的啊,因为你发布订阅这种模式,主消息是推送过去的,类类似于咱们的所说的那个公众号一样啊,消息是推送给你的啊,这个就是这个,然后他他的好处就是说什么,他不用开一个监控嘛啊,因为是消息队列这边,只要来消息了,我主动的推送给你啊,跟你这个客户端这边啊,你不要说你不你不需要说弄一个什么监控啊,在这儿一直看着我这边有没有数据来啊,不用做这个事啊,这这这两个对比,哎,我们卡不卡这个消息训练,那大家要需要知道是我们卡不卡呢,是基于这种。点对点模式的,也就是种拉的模式的啊,拉的模式的,那今天我们到时候讲到API的时候,你就能看到具体的方法,它调用的是一个破方法啊,就是拉取对吧,拉取的一个方法啊这样的,这要记得的啊,就是消息队列有两种模式,但是卡夫卡呢,它只是其中的一种啊,其中一种,而且这个消息队列这个模式指的是消费的时候啊。
03:18
对吧,跟生产这边,那生产这边叫推,不是说这个地方就改成了推,对吧?哎,它是指的消费这一块啊消费这一块OK,这是整个的消息队列和我们卡夫卡,然后之后是卡夫卡这一块。啊,它是更多的是用这个做这个流失处理这块的一个内容,流失处理有关内容啊,在这块的时候,大家需要记得的就是诶,它跟SUK有关系吧,啊跟苏K有关系,那跟苏K有关系,第一个是集群。有关系,也就是我们在从K看到的那个Brooks的这个节点,对吧,它底下有个is,有一个topics,就是它有哪几台机器,第二个topic就是说这个。卡夫卡集群有哪些,创建了哪些topic对吧,它有这些信息保存在这的第二个我们关注的是哪块啊,Consumers对吧?哎,Consumers这个节点,那这个节点下保存的就是不同的consumer组,它的一个关于topic某一个分区的便移代码,它是topic下面还有分区这个节点分支的嘛,也就是说关于一个消费者组呢,它对于一个分区,它有一个off。
04:28
它维护一个off,哎,它这个off是维护到分区这的啊,不是说topic里边只有一个off,哎,你如果说你这个topic有三个分区,它就维护三个offet啊,三个ET是这样的,哎,这是里面核心保存的一些东西,但我们没有看到关于什么producer的一个内容吧,啊,因为producer是不跟这个推广进行打交道的啊,它也不会将任何的一个信息存在这个K宝啊,存在K宝,OK,然后就是卡普卡,它本身是一个分布式的一个消息列。啊,分布式的消息队列,然后它是有集群的,然后集群中间的一个节点呢,叫这个broke啊叫broke,然后真正存储数据的地方叫什么。
05:07
Topic对吧?啊叫主题啊叫主题topic啊好,那整个的架构呢,就是producer卡集群,然后是这个,其实卡集群就是一个一个的broke啊broke然后是consumer,整个过程当中这张图呢,啊就不用再放PPT了,我们核心要知道的是topic相关的。内容吧,哎,Topic相关的内容,那topic它是有分区,有副本的概念的啊,有副本的概念的,那它这个分区是做什么。干什么用的,就说呃,卡卡的一个分区有什么好处啊。负载均衡对吧?哎,本来这个数据呢,我要存在一个分区,如果说只有一个分区的话,那这一个分区肯定在某一个节点吧,哎,它不可能把一个分区数据放在两个节点,那任何关于这个分区的一个读写是不是都会找这一个节点啊,来特别慢是吧。
06:00
还有一个就是分区,就是说这个是对于卡夫卡集群来说,它是有这种负载均衡的好处,那对于消费者这边呢。它有什么好处,可以提高它这个并发度,对吧,也是提高效率的,也是提高效率的,所以说在公司当应用的时候,就是针对于某一个topic的读数据啊,它有几个分区,我们就建一个几个消费者的消费者组。几个消费者,消费者组你可以这样,你可以用,就是说这边假如说N,这边是M,就是说分区有N。消费者有M你的数据,你会你要保持一个这样的关系。保证要这样的话,最好是等于正好等于,但你不要M大于N大于N,是不是有一个消费者肯定是浪费的吧,啊,肯定是一个浪费的啊,就是说你启动的时候就直接就有警告了,昨天对吧?哎能看到的,因为我们昨天测试的first呢,是一个分区,然后我们起了两个消费者。而且这两个消费者是属于。
07:01
同一个组的对吧,哎,同一个组的,所以导致呢,他就报警了,说没有一个可用的topic分区对吧?啊没有一个可用的topic分区来给你提供了,所以说这块的一个,哎,这个关系哎要零影响啊,就是为了提高它这个并发啊,提高了一个并发,那当它小于的就是N大于M的时候,那就意味着某一个消费者会消费多个分区的数据法。哎,消费多个分析的数据,不仅如此,一个消费者还可以消费多个topic的数据啊,可以消费多个topic数据,这也是可以的啊,到时候我们可以看一下啊,做一个测试啊,特别多。消费的分区特别多,这消费的时候就跟分区没有太大关系了,分区是你建立topic建立的吗?啊,所以说公司当中一般的时候呢,就会一个组里边放多少个consumer,是根据你这个topic啊,这个分区来的,是这样的啊,根据这个性质来的啊,尽量保持一致。就是刚刚说的是说。
08:00
这个分支是和消费者。一样,就是最后数量,消费数量是跟一个消费者组里边消费者的数量相等。能能懂这个意思吗?就是当前这种情况,哎,这个topic a啊,他有帕点零有帕一,你就拿一个消费者组,这个消费者组里边有A有B这个,哎消费一这个消费。零。对,但是你这个消费者要放在一个组里面,如果说是这种情况,如果说这个是属于A组,这个属于B组,假如说C组啊,你来消费他A,他是怎么消费的呢?消费消费者A啊,会把零一消费过来,消费者C呢也是零一。那你说你就重复了啊,所以说你要把这两个消费者放在一个组里边来保证数据不重复,是做这个事儿,所以说说表述的是topic要分区数跟什么呢?跟一个消费者组里边的消费者个数相同,而不是直接简单的说跟消费者的个数相同。
09:04
啊,因为你如果简单的说的话,那你消费者可能属于不同的组,不同的组织这样的啊。是分区,分区这里的话也没有特殊化。就是说我声音的话,我还是可以访问你。是分区和分区的,同样的话,他一样的数据。重复重复,那这这这样我下课跟你单聊好吧,啊再聊应该其他同学应该没有,还有其他同学还有什么问题吗。好,那我们往下走。然后是我们这个答题群就不多说了吧,啊,这个比较简单啊,主要是核心的是这块,就是你要把这个,哎,你们有做测试吗?就是这个开始不注释。也没有做测试是吧?啊,没有做测试就算了。那个东西你要记得就行了,那个东西得设置一下吧,而且你设置了为出之后,它还有一个显示的bug是吧,他告诉你是标题为删除了,所以你应该把那个设置为数,其实你已经设置为出了,对吧?啊,就是它框架显示打印log日志的一个bug啊,一个bug这个注意一下就行了,OK,然后这一块关于这个起图机群的时候,给大家就扩展了一下,但是没有录到视频里面,对吧?啊,就是说中间加一个什么。
10:26
杠DEMO对吧?Dae on啊DEMO啊,加一个DEMO,那这个它就不会将日志打印到前台了吧,它真正的将这个数据放映到后台了,放到后台了是这样的啊,那你写群群景脚本的时候啊,你要用这个杠DEMO。要不然用其他两种方式,第一个你不加语符号,这种你直接就起不来,他不可能往下走就执行完第一个之后,第二个就执行不了,因为窗口它整个窗口没释放,第二个你用语符号的时候,你要不断敲回车就很麻烦啊,所以用那个杠table那种方式,那那种方式OK,那关闭集群stop,或者说你直接跳对吧,因为公司当中其实这种启动和这个关闭命令啊,不常用。
11:07
啊,不常用,因为公司是服务器对吧,不是咱们那个PC,不是咱们PC,那他不可能说每天早上来了开一下,晚上走了下班了把它关起来,不可能的啊,所以说像这种开启和关闭命令用的比较少,除非说挂了,然后重启一下啊重启一下稍微有一点,嗯,中中等一点的公司吧,都有运维什么进程,你GPS看一下,哪个进程不在找运维哥们,还说哪个进程丢了,启动一下就行了啊就就就这样,连自己启动命令都不用敲了,但是学习阶段这个东西得给敲除了,把它给清除了,因为你天天要用的吧。因为咱们是天天要用的啊,然后关于这些命令行的一个操作呢,就是相对来说比较重要的就是关于topic这个操作。啊,就是创建啊,删除啊,然后描述啊,然后看一下它有多少个啊等等你像这个。基本上不用了啊,除非做测试的时候看一看那个数据是不是正常能能正常能通对吧,生产环境当中肯定是不会这样用那个cons或者cons cons啊不会这样用的,不会这样用的,因为数据来源不可能是你手动在这控制台输的啊,不可能是这样的。
12:17
啊,然后是后面我们讲的这个工作流程分析啊,是分为三块。生产保存加消费的啊,这三块来做的,首先生产呢,它是通过推的模式给他推进去的啊,推进去的就是生产者主动的将数据发送到那个broke啊,其实它是发送给了。Topic里边某一个分区的leader leader哎这样的,那那个leader其实也是一个博机器吧,啊对吧,所以说直接说写到那个博里边了,博里边了,OK,然后这里边关于这个分区啊副本啊,刚才也都说了,刚才也都说了它有什么好处啊等等的啊。啊,然后写入流程这一块啊,写入流程这块,呃,大家主要关注的点就是这个AC啊,因为这个东西面试的时候会问到问到,然后你自己在公司做生产的时候,你也要知道这个ACK到底应该怎么选取,就看那个你数据是注重安全性还是还是注重速度啊两个啊两个这样的你去看一下就行了。
13:20
然后之后是这个broke保存消息啊,就是数据保存这块,那这块呢,我们主要是看了一下它本地,它主要是这个点log这个文件对不对啊,点log这个文件,那这里边呢,就保存了实际的数据,而且是序列化后的数据,对吧?序列化后的数据,那也就意味着到时候我们写那个什么。生产者自自自定义那个什么,从ideal当中写代码来创建那个生产者的时候,你要指定它的一个序列化的一个方法,序列化的一个类啊,那消费者那边要指定什么。反序列化的一个类啊,反序列化的一个类,因为就是它在底层存储的是序列化的,序列化的OK,那其实核心的我们要了解的是从K里边的一个东西。
14:03
啊,里边的东西两个节点吧,一个是这个consumer,一个是Brooks,哎,它底下一个东西一定要自己去看一看啊,稍微的记一记,稍微记一记,它里边有什么核心的一个东西,它里边保存了哪些数据啊,保了哪些数据是这样的,那后面就是我们所讲的这个。消费者。消费者这块呢,提供了两套API,一个高级的,一个低级的,嗯,然后注意啊,有同学看到那个后面。有那个。过时的和新的对吧,这个是不一样的。这加在一块就等于四套了,就是说从不同的维度来描述这个API的,能懂这个意思吧,过时就是过时的,就是说。对吧,就是你们之前那个什么加一个中划线declare,但是高级和低级。它不一样啊,哎,它不一样,它不是跟他不是说低级的就是过时的,高级的就没过时的,不是这个意思啊,不是这个意思啊,那那高级API和低级API它分别的一个对比,就是说高级API它是。
15:06
不用你来管理这个off,也就是说你只给他告诉他你要读哪个topic数据就行了,而不是说你主动的去连到那个这个假如说这个它这个占比有三个分区,你主动去连零号分区这个leader,然后又连一号分区这个leader,不是这样的啊,不用做这个操作啊,那第一级PI的你就可以做这个操作了,哎,你就想连,我就想消费什么呢?消费零号分析的数据。我就想每次都从那个15那个ET开始读,是这个意思啊,指的是这样的一个要求啊。高级API跟低级API,那今天我们都会用到它的一个。到时候能看到他们俩写起来的一个难度的一个对比啊,写完了之后应该大家都不想用TGAAPI了啊。但是那块要注意一下,就是当前这块呢,我们之前也说过,呃,今天所写的这个djpi啊,更重要的是帮助大家理逻辑对吧?理逻辑更重要的还是后面Spark的时候跟Spark streaming来结合的,Spark streaming就是Spark有流失处理,就是从卡夫卡过来数据啊,经过那个Spark streaming它自己封装好了,但是你要维护这个off就是自己要维护,所以也会用到这个d gapi d jpi,而且这块有一个很诡异的地方,就是同样的一套DCAAPI同一个类啊。
16:27
Java当中标记过时了,干了,不过没有过时。就这样的,到时候你们可以感受到啊,你能感受到今天我们写的时候呢,你又能可能看到某个类过时了,或者说某一个方法过时了,应该是两个吧,我记得如果我记得没错的话,到时候我们可以看一下两个东西被标记为过时了,是这样的,但是在盖了那边一样的用法,但是呢,它没有被标标记过时啊,没有被标记过时。所以说还是DDAAPI更更重要的还是侧重于跟Spark那块的一个对接啊,用的更多一点啊,那块的一个核心代码,到时候其他老师带您敲的时候,那个代码是可以,呃,一定要记住的,因为那个代码拿到公司就是公司生产环境的代码,拿到公司直接用的啊,那个代码是要记住的,当年这个代码呢,你只要把逻辑理清楚,然后晚上敲一敲,过一遍,这个代码过一遍就差不多了,但是逻辑要理清楚。
17:19
啊,然后后面是我们讲了一个消费者组,消费者组啊这个概念主要的还是刚才我们提到的吧,其实那个分区有什么好处那一块,对吧,分区有什么好处那一块啊,所以说这个消费者同一个消费者组里边呢,不同的消费者他不能够。同时去消费。同一个分区的数据吧,哎,你记得这个点就行了啊,记得这个点就行了,其他的也没有什么太多的一个东西。
我来说两句