00:00
好,那我们看一下这个卡夫卡的一个基础的架构啊,这块呢,我们从基本概念上做一个了解,了解之后呢,我们再运用一下,后面呢,对这里边的一些细节内容,还要详细的拆开了去给大家讲啊,就给大家讲这块呢,我们要粗略的做一个记忆,有一些东西呢,需要大家去记一记的啊,这个时候就要记下来,当然也有很多细节的东西,是不需要这个时候说听一遍就把它掌握了,因为我后面还有练习,还有练习好之前呢,我们from是分为了south China加这个啊这三个东西,那在卡卡当中呢,它也有类似的三个东西,所以呢,大家不要混啊,不要混第一个。生产者,那还有一个。消费者好。卡卡集群啊,卡法集群,那有同学在想不对,你这个生产者跟消费者这个东西啊,应该是不是卡普卡属于卡不卡。
01:01
那你这个生产者应该是什么?后台在里边发送数据,那消费者就是我们说的Spark,但是你要注意生产者消费者,那你写的Spark也好,说后台产生的数据也好,你是不是应该用,至少你不说用卡普卡这个组件嘛,你至少连卡夫卡掉吧。至少得连卡不卡吧,如果说你不连卡不卡,你能把消息说发到卡卡里面吗?发不到啊,发不到,那你起码得跟卡夫卡有点关系吧。没问题吧,啊,所以呢,我们把它放在这儿了啊,它是一个生产者,一个消费者,还有中间的卡瓦集群,那其实中间这个卡瓦集群呢,就是我们所说的那个队列,它暂存消息的一个地方。他不是缓冲嘛,对吧,我们说了这个还有时效性啊,还有时效性它就是暂存我们这个消息的一个地方,至于有同学可能在想这个消息是什么,简单点消息跟我们之前那个传递的数据是一样的。就是一个数据对吧,啊,就是一行,你就简单点,就是传一个字符串。
02:04
行吧,啊,我们一直说消息,然后在那边又是什么事件,只不过说人家把它封装了而已,把它封装了啊,其实就是一行数据能听懂啊,其实就是一行数据,OK,那生产者生产者我们看一下这里面一个点第一个。首先你生产者能生产消息,前提是卡瓦机器得起吧。对吧,我们刚才说了它是一个分布式的对吧?啊所以呢,这块呢,同样的画了三,那每一个broke,那大家觉得它是一个什么东西啊。卡卡,它就是一个服务器,相当于只不过说起的一个卡夫卡的一个进程。其他卡不卡的一个进程啊,是这意思啊,就是一台服务器正好我们102103104对吧,三台服务器这个博呢,就三台服务器博一博二博三,这由这三个人呢,组成了一个什么。集群啊,组成了一个集群,OK,那这个是它的一个里边的一个内容,好,那存数据也就是说的存在这个里边吧,里边啊存在里边,但是呢,有一个问题,如果说我们只有一个来存这个数据啊,那容易乱套。
03:12
那在哪呢?我AB系统或者C系统,我有很多系统都要用卡不卡的一个内容,那如果真的只在broke里边,我们不做分类的时候。所有的消息全部混在一块儿吧。想一下这个问题啊,对吧,啊,它所有的消息都混在一块,就类似于我们当时所说的那个什么China选择器,将数据给它分类啊,对吧,那这里边呢,实际上也不是说直接直接存在博博里边呢,还有组件。叫哎,它有不同的什么。主题。啊,不同的主题,诶,你是那个点赞消息,你放在点赞主题里边,你是浏览的这个日志对吧,你放在浏览的主题里边,也就是说它相当于在里边要建立很多很多什么。
04:03
主题,这个主题的意思就相当于把我们这个消息呢,做一个分类,做一个分类能听懂啊,因为你不可能说卡夫卡这个东西呢,它是一个消息队列啊,整个是一个大的消息队列,无论是什么系统来了,咔咔都把数据往这边存,那就很容易乱套吧,最后你消费者也不知道取什么消息了,对吧?啊,假如说你你这个整个的依赖的AB这边有CD啊,A呢跟C要通信的,B跟D要通信的。那你都是直接,如果说直接放在卡卡这个集群里边没有什么分类,那最后C跟D拿到消息AB2个人的嘛,对吧,乱套了,那基于这种情况呢,我们可以干什么事啊。你呢,我给你划分一个主题,你呢,我给你划分个主题,你主题名字,假如说我取名叫AC,你主题名字叫BB,对吧,将来那你发的时候连就连什么AC主题,你连BD主题,那同样的你C来消费消息的时候,连这个主题,就是这个主题的作用呢,就是将数据做了一个什么。
05:04
分类啊,做一个分类,做这个事的啊,做这个事的,但是大家能看到我在出现这个PPT上出现这个主题的同时。它里面有什么东西啊。看到了PARTAN0跟PARTITION1对吧,啊PART0跟PART1这个是。干什么事的?一般的我们分区的作用是干什么?想一想你MR当中的分区干什么事的?你have当中分区是干什么事的,对吧?你再来想一想这块能不能想得通?当中分区干什么用的?提高这边的平方是不是当中的分区呢?查询的时候可以减少读取数据量啊,对吧?啊减少数量,其实呢,这个两个都有这个作用啊,那这块呢,更高的是提高某一个topic整个的一个负载均衡能力。
06:09
因为你看这两个主,这一个主题两个分区,画在两台机器上面嘛,啊画在两台机器上面,也就是说将来我消息来了,假如说以轮询的方式,哪一条哪一条,哪一条哪一条。不是传给同一个机器的,对吧,提高了我们这个主题的什么。负载能力也是我们卡夫卡提醒的,什么负载能力,就做这个事的啊,做这个事儿的啊,同时也提高了频繁度,因为之前。你。要跟一个机器去连,现在跟两个机器对连对吧?啊提它这个并发啊,提高它并发是这个事啊,提高它这个并发,这是这个点,好,那接下来其他的你除了看到partition,你还看到了一个什么东西。是不是还看到这个啊。这是OK,这个leader,注意是在topic a part1出现之后同时出现的,不是在BROKE2 broke1 broke3出现的吧。
07:07
对吧,这要区分开,也就是说这个leader针对的是当前这个什么。分区的leader,而不是说整个集群我有一个不一为它一个leader,不是这个意思啊,它指的是那个分区的leader,既然它有leader,那应该有什么,有follow。没问题吧,好,有follow。有。其实这个风路就相当于什么作用。对了啊,就相当于是备份的作用,因为你是一个消息队列,是一个分布式的,你应该提供的是一个高可靠高可用的一个系统,对吧,如果说你这个只有一份,假如说我这个机器当掉了。那是不是就不能工作了,假如说只有一份的时候,对吧,我现在呢有两份,那这个副本这个机制其实很好理解一点。就是做一个数据的冗余,假如说有一台机器当掉了,我们就可以干什么。
08:03
把另外一个follow提升为leader对吧?啊,做这个事的啊,提升为leader做这个事的啊方式,而且那既然他这个副本啊是这个功能。所以这个leader跟follow一定是不在。同一台机器的,就类似于你HDFS一样,你挨着DFS写十个副本,你只有三台机器,你在哪一台机器上看到它超过一个数据?他不可能出现把说这一份数据我在102上存两次有意义吗?没有意义吗?你102挂掉了,你存十个也没有意义了,所以呢,这个地方包了宝这个副本其实也一样的,因为我们说了这个卡不卡呀,它虽然不是说真正的一个文件存储的一个框架,但是它中间至少还能暂存一下消息吧,还是有存储功能的是不是啊,还是有存储功能的这个意思。好,那既然你有存储功能,防止你宕机导致我整个集群的一个失败,所以呢,我把你数据给它做了一个。
09:06
备份。做了一个备份,但是这个备份啊,跟之前我们data备份不一样,因为data log里边有leader,有follow。啊,这个等会再聊。的里面多个副本,有leader,有follow吗?没有吧,啊没有的,那这个地方有follow,有leader,他是干什么事的?是这样的,无论是生产者也好,还是我们后期消费者也好找leader。只找你follow呢,仅仅是提供什么备份作用呢?假如说你挂,我可以替代你子。可以替代力的功能啊,它的跟其他那个风不一样,不是说你这边有两份,两份大家完全一样,随便你找例子也好,找follow也好,动能不是的,它只能连接的啊,是这个点要注意一下啊,注意下啊,那之后呢,还有其他的,我这上面是不是还可以有其他的topic和B呀,对吧,我topic和B可以可不可以只有一个分区呢?
10:03
可以啊,这个是你创建这个主题的时候所限定的,你也可以三个副本,也可以甚至可以五个副本。对吧,那像我们NDFS是不是三台机器搞十个副本都可以啊,带不报错对吧?到时候我们对比一下,看这个地方可不可以啊,好,这个呢,也就是说我生产者B啊,我可以往这里面去发送消息啊,对吧,这是这块里的内容,我们生产者。和。集群存储啊,集群存储呢,核心的有。主题这个东西你要记得,而且你要知道主题一是分区的,二每个分区是有什么。副本的啊,而且呢,副本分leader跟follow啊,大概的记一些这个概念,这些概念其实因为我们之前学过很多的分区啊,还有副本的东西啊,稍微理解起来也不是特别难,但是呢,这些东西都融合到一块儿了,可能容易记得很乱啊,但是呢,我们后面会慢慢的去用啊,慢慢用好,那接下来是我们所聊的什么。
11:03
消费者,那你往里面发送消息。这个不是说消息,就是这个数据最终的落点了,你更多的是要给其他的一个系统来用啊,啊给其他的一个系统来用,就做这个事了啊做这个事了,OK,那。同样的。消费者这边有个概念。叫消费者组。你可以把多个消费者用一个组名,那这多个消费者呢,就是一个组里边的好,那一个组里边呢,他就有一个前提条件了。你看他消费的一个内容。对,有人发现这个点说的是一个分区,只能被一个消费者组里边的某一个消费者所消费。
12:01
我再说一遍啊,就是某一个分区。某一个分区只能被同一个消费者组里边的。消费者消费。当然如果说你画这条线,就这条线在的同时,你画这条线不好意思错了,嗯。能听懂我刚才说的是同一个分区的数据同时只能被什么。同一个组里边的某一个人啊,某一个消费者所消费啊,现在这个消费者A是不是消费的,这个他点零的,假如说他们已经已经绑定了,那此时如果说你画图的时候画的出来这条线。那就不对了。那就不对了,但是如果说你画的是这条线。这个是可以的。
13:01
啊,是指的是同一个消费者组里面的不同消费者不能够同时去消费什么,同一个分析的数据啊,因为他是把整个的一个组概念什么呢?你可以把整个的组啊当做一个大消费整体,一个消费团体。对吧,主要的作用就是提高它的并发的,当然我可以这样做,我如果说当前这个组里面啊。没有病。只有A。只有A。啊,那而且呢,我消费者A订阅的是主题A。注意,我说的是订阅的是主题A,那你告诉我主题A里面所有消息是不是都要给消费者?对吧,因为我当前这个组里面只有只有A啊,这B我应该给它圈掉了,对吧,那是不是这条线还要干什么,我要一个人消费两个什么分区里边的数据,那你看消费者组有什么好处啊。
14:06
消费者组有什么好处啊?是不是提高消费能力?对吧,啊,提高消费能力,因为你之前是一个人消费100条消息,我现在是两个人每个人消费50条消息,做这个事,提高他这个消费能力,而且我刚才所说的同一个。消费者组里边的不同消费者不能够同时消费同一个分析数据,那你消费者的个数如果说多于某一个主题的分期数,有意义吗?没有,那假如说啊这个C。消费者C也是一个组里边的,你不要看这条线。因为不能够同时消费你,对于A这个主题来说。假如说三个人订阅的都是A啊,都是A,对于A这个主力来说,它是不是这条线走不通了。因为A已经占用了,这条线是不是也走不通了,对吧,BB占用了,那你这个C只能是在做什么事,浪费资源的事,对吧,因为你要开呀,啊,你要开开开起来,但是呢,其实你开起来占用了我整个资源,但是没干什么事。
15:15
对吧,一直在空转啊,相当于空转,所以呢,并发度最好的时候就什么时候。这个位置消费者一消费者组里边的消费者的个数跟这边的一个分居数相等的时候,它的一个消费速度最高吧,啊,当然你要这个前提是你的整个机器资源要好一点啊,要好一点啊,啊那这个呢是我们所说的生产者。集群以及消费者啊,那接下来这边还有一个。Cable对吧?啊,他是干什么事情呢?是这样的,首先你卡不卡整个集群。能正常工作要依赖于我CK。也就是说他这个ZK啊,会帮助我们卡卡集群存储一些信息。
16:05
啊,存储一些信息帮助我们管理整个机群的,因为这个机群啊,它不像我们所看到的HDF一样,你在每一台机器里边配了一个什么内note是谁对吧?那我一起在note,我就根据我的配置文件是不是能找到name note,对吧?啊,它是通过这种方式来构建机型的,而在我们卡夫卡里边。不需要,没有这个东西。没有这个东西,但是你要填的是,你要想卡夫卡是共用的,你要想把卡夫卡多台机器是一个集群,很简单,他们所用的ZK是同一套集群就够了。是同一道集群,他们卡不卡就能组起来一个大型集群啊,共同工作,这意思好,这第一部分我们所说的卡不卡集群这块会在CK里边存很多内容,到时候我们在ZK客户端能看到这些内容啊,到时候会大家就看到,还有第二部分消费者也会去存一些东西。
17:03
那我们想。这个消费者来消费消息,而且我们之前所说的消费列有一个很大的好处,就是结网,或者说假如说消费者挂了,我在启动的时候是不是应该能干什么事啊。能干,能接着消费对不对。你才能达到结尾的作用啊,如果说你挂了不好意思,你一消费从头消费,那就不等不等于结尾啊,那你不是还是说两个人要同名,我直连算了呗,反正直连挂的也是同等交易对吧,那这个地方呢,也就是说它。挂了,假如说你这个消息十条对吧,我消费了五条了。我下一次假如说消费五条我还挂了,我下一次起来之后,我从第六场开始消费,他要做到这个事情,那做到这个事情,那个前提一辈子。要干什么事了?对,其实跟我们所讲的太低压力一样。
18:03
他有电压,是不是你监控这个数据到哪了,是不是把位置信息保存下来啊,对吧,那在这个。消费者里边他也要保留什么消费的位置信息,我消费到哪条消息了,我要保留下,而且呢,这个保留不是说保留在我消费者这个进程的内存里面了。对吧,不是保留在内存,因为保留在内存里面挂哪是没了,所以它要保存在一个非意识环境,那个我们所讲的跳低压,它保存在本地文件系统,对吧,有一个什么接S文件对吧,点接S,那这个呢,它。保存在里边。啊,保存在K里边这样那个数据啊,保存在K里边这个意思啊,当然了,呃,跟我们之前所聊的那个东西一样,它的内存里边肯定也有一份了,他平时正常的时候都用内存这个,哎,我读完了写会,读完了写完写会当我挂掉了。
19:01
我是不是要从CK当中先取回来啊,然后再接着维护这个内容呢?啊,接着维护这个内容,好,这也是我们所说的,如K呢,它在里边起到这个作用,帮我们卡普卡集群存储一些信息,第二部分帮助我们消费者来存储。消费到的位置信息OK吧,啊,消费到的位置信息我要保留下来,因为我要接着消费接着消费,但是不好意思,这个东西呢,在。0.9跟高版本不一样。在0.9版本之前啊,它是存在ZK当中的,这个叫off偏移量啊,Off偏移量啊,就是消息的一个变量啊,那在0.9版本及之后。啊,它存在卡不卡。存在卡夫卡里边啊,他把这个消息又存回去了。存在一个系统的topic当中。那个topic呢,由系统维护的,不是你创建的,系统创建的你懂啊,到时候呢,我们能看到,能看到无论它保存在哪,保存在本地也好,保存在那个MY也好,保存在CK也好,都是一个作用。
20:07
记录我消费位置,为了防止我挂掉,我下次能接着消费,能做这个事的。OK吧啊,能做这个事了啊,那这是这个点啊,那我们要聊一下他为什么要改这个事情,对吧,存在CK存的好好的嘛,到了高版本把它改了,说明ZK当中肯定有一些点他不不满意了。对吧,是因为这样的,你消费者本身是不是跟卡夫卡集群这个leader要进行通信。就是本身跟卡夫卡机群是连接的。然后我在你里边获取数据的同时,我还要维护着跟CP的一个连接。而且你想想看啊,这块我们刚刚说了,它是消费者是以拉取的模式来获取消息的。对吧,拉取的速度是非常快的,就是可能一秒钟好几次,那你拉取好几次,你是不是要跟K进行打交道呀,对吧,那跟CK这边打交道就太过于频繁,太过于频繁了啊,整个的呢,效率就不高,而且K这个东西啊,它本身我们所讲的它就是提供各大框架之间润滑剂的一个作用。
21:15
那你此时这么高并发的一个请求,对CK这边本身也不好吧,啊也不好是这意思,所以呢,他后来改了,改了存到哪呢。本地注意这个本地不是本地磁盘,讲的是卡夫卡本地,它存在某一个主题里边,因为我们之前说过,卡夫卡这块存数据是不是存在topic里边。对吧,啊,它也是它存在一个系统里边啊,系统里边啊,回过头来,就之前那个学生问到的问题啊,就说存在内存还是存在那个磁盘。啊,这个卡卡存效应的存在磁盘,因为它默认保留七天。存在内存干不了这个事儿啊,它会存在磁盘的啊,存在磁盘的啊,这个稍微提下,后面呢,我们能看到这个点,因为刚才发出就问了,所以咱说一下这个事儿啊,本来是讲到后面说的,因为无论是存在内存还是磁盘,它都是有一个存消息的一个过程了啊,存消息过程因为问到,所以就提前说一下啊,它是存在磁盘的,默认秒存七天,我们之前不说了,它有个时限性嘛,对吧,它不是永久保存的,它默认的情况下是七天,而且它是168个小时嘛。
22:19
啊是配置文件里边写的是168个小时,不是七天嘛,对吧,啊七天啊,那这个下面呢,是我们所讲的它的一些点啊,它的一些点里边的一些细节的一个东西啊,但是你现在要记住的生产者消费者。总记的对吧,然后是卡卡集群里边主题就topic,然后是分区,然后是副本对吧?啊副本这几个东西,稍微的这几个概念去记一记啊,不要求说现在你把这张图就是把它盖起来说立马能画出来,呃,没做这个要求,因为后面我们还有大量的练习和架构的一个深入去了解啊,这个从面上给大家铺开讲一些点,还有这个副本及还有这个呃,主题这个分区到底是怎么工作的,我们还要详细的去聊。
我来说两句