00:00
好,接下来呢,我们回顾一下上次课讲的内容,上课我们讲哪了,从哪开始讲呢?说副本啊,哎,副本副本呢是一个非常非常重要的一个话题,那这里面呢,涉及到了大量的这个知识点,第一个知识点就是副本的。好处。干嘛呢?为啥要有副本啊?是不是提高可靠性啊,哎,记住啊,要提高可靠性啊。那副本是不是越多越好呢?为了提高可靠性,那我就无限的加,那不是啊,副本呢,要适可而止,在生产环境当中通常是几个。通常是两个啊,也有个别公司会设置成三个,那默认是几个,默认一个啊,记住啊,那这个怎么测呢?其实咱们还有一个小知识点没讲,呃,你们回去可以做一个实验,什么样的实验呢?你往一个没有提前创建好的主题里面发送数据。
01:03
你看一看。卡夫卡集群会不会给你生成一个逃主题?比如说咱们创建的是first second啊,然后three four,那你再发送一个往TOPIC5里面发。你看一看,没有提前创建的情况下,他会不会帮你创建,创建的是一个什么样的主题,那这个主题的分期数是多少,它的副本数又是多少?啊,那后面呢,我们再讲这个,呃,企业这个工作经验的时候啊,会给大家揭晓这个答案。那下面再来看他这个副本呢,跟嗨豆的副本有点区别,区别主要在哪啊?它是有leader和follow之分的。嗨,我是没有啊,哎,嗨,多我是没有的啊,这要注意还有一点呢,要再补充一句,所有的生产者和消费者针对的对象是谁?对啊,是leader。
02:03
那在下面再来一个,这里面有两个,有几个名词啊,叫这个。Isr是吧?啊,你就记住一个R就行了,那有AR osrr,那么isr里面存储的是什么类型的副本?是leader和follow能够正常通讯的,那正常怎么判断它正不正常?这个时间参数要记一下。多长时间?30秒对不对?按30秒就是leader和follow之间的同据,无论是同步数据或者是他们之间相互的请求数据,必须在30秒之内有相应的这个请求和应答,如果没有,那对不起,会从SR队列里面出去啊,这也知道。下面我们再来看副本下一个概念。副本,他的一个选举机制,由谁来帮我们来选举?哎,非常好,Controller啊controller呢,他是负责这个进行一个选举的。
03:04
那么他选举的规则是怎样的呢?哎,首先呢,他要求啊,在isr列表里面存活。好,那接下来呢,它会按照AR当中排在前面的优先进行一个选举,比如说我们举个例子,这里面是0123,那IR里面呢,存在的这个节点啊,是对应的零。二三,那好,那首先呢,这个零就会成为新的leader。那如果零挂了之后,那谁会成为力呢?哎,正常情况下应该是这个一,哎,但是一呢不在安杀列表,那就会二成为新的力啊,这样一个顺序啊。好。那么下一个,那我再补一吧,这个controller。怎么出来的?谁先抢到主挥边对应的注射节点,是不是谁就是ctrl leader啊,他挂了之后其他人正常补位啊,继续抢。
04:01
那下面呢,是在生产环境当中,Leader有可能挂了。Leader挂了,他在底层会怎么处理呢?这是leader,这其他的是。那leader挂了之后,那其他的follow是不是可以,如果他在SR队列里面,是不是就有条件上位啊,那以前上位,比如说这两个都在这个SR队列里面,假如说他上位了,他上位之后的第一件事是干什么呢?得解决数据一致性问题。是吧?哎,你得跟我进行同步,那你高于我部分怎么办?切掉啊,低于我部分你就开始追赶,那这里面引入两个名词,一个叫Leo,一个叫hw lo,什么意思?心如。哎,买一个副本最后一个off啊,然后加一啊加一,那还有一个呢,水位线什么。
05:03
最低的那个对吧?啊,最低呢,其实也是一个加一啊,就差一个一啊行,那这样呢,就是呃,Leader挂了,那下面来看一下这个follow挂了。了怎么办?哎,Follow挂了之后啊,那他挂了,那leader和follow该读自己的数据,读自己的数据,哎直到这个follow他恢复什么时候恢复呢?哎,正常他们之间能通讯,一通讯之后他怎么办。它截取掉之前它保留的水位线,还有最高水位线啊,多余的部分,然后是不是再次追赶呢,直到追赶到当前的水位线,那么它就能够恢复到isr队列里面啊,就这样一个过程啊,那这个啊,这到这那再往下走。下面呢是副本的一个分配。
06:01
它默认的这个分配规则是什么样的?举个例子。0123。那四个分区,那他下一个副本怎么存。这是第一个副本吗?一共三个副本啊,咱们三个副本四个节点。什么1230。第三个副本相当于是。2301是这样吗?好,这是第一组,那这是第一组的一个传递,那我再来一个呢,如果说我设置的分区超过四个。看着吧,那下一波应该怎么传?非常简单,你看那你下一波就是1230。从这吗?这不差一位吗?哎,错开一位,然后再下一个呢,那他的一个副本呢,2301,然后再来一个3012。
07:05
就是这样啊,这么简单啊,然后呢,你把它拎出来。啊,接下来我们看下一波,那这是第一波第二波,那第三波呢。能猜到吗?哎,那下一波就是22301,哎就这样啊,以此类推,所以要掌握这个规矩,那他为什么要这么做呀。尽可能的负载均衡,以及保证数据的一个安全可靠啊,他是这个角度去做的啊。想稍微了解一下,那么即使是这样去做。在生产环境当中也会出现一些问题,因为它正常的硬件服务器的配置就不一样。那我们就需要手动的去进行一个干预,那手动副本分配你也得会。那怎么分呢?是不是可以先执行啊,叫制定计划啊,制定。
08:06
计划啊。制定计划呢,是杠杠战之后呢,是执行计划,执行完之后要有一个验证计划。这样下来就OK了啊,那这个呢,一般情况下是需要你们去企业里面,呃,负责这个平台运维岗的时候,会涉及到对应的这个命令和需求,这是手动副本的一个分配,那接下来还需要了解一个事儿,就是的一个。负债均衡。这应该知道吧,哎,他们之间呢,你可以设置为自动的平衡,那么这个呢,是10%啊,相互之间相差10%,呃,主要是防止什么情况呢?就是你正常的机群不会出现这个问题,因为它都是按照均匀的这种分配,就怕出现这种咔咔。
09:02
异常挂掉退出。那么它这个力分配就不会那么均匀了,就会有一些啊意外啊,这要注意。那最后我们学的啥呀?叫手动增加副本因子。这个呢是也是你这个公司啊,运行一段时间了,至少应该是一年以上啊,突然间发现呢,以前一些不是特别重要的数据,随着公司的发展,突然它变得有用了,那有用了之后,我们就需要提高它的一个可靠性的保障,那这时候我们就想到给他增加对应的副本。那这个呢,你要通过命令行的方式,对不起,操作不了,只能手动进行一个升价啊,知道这个事儿就可以啊。那因为你知道之后,你知道咱笔记上有,那剩下的事儿就好办,就怕你不知道啊,好多同学就是不知道自己有啥,这个就很头疼了,那副本结束之后,接下来我们学的是存储机制吧,存储。
10:03
那存储机制的话,你首先从大到小啊开始,呃,去记哈,最大的是b brokeer,比如说服务器,服务器里面放的存储数据呢,是按照类型啊分类topic,那topic下边呢,是对应的叫分区。啊,分区,分区呢,每一个分区下面存储数据的时候,有一个逻辑上的概念叫log。啊,这是标准的叫法啊,这因为咱们那个命名叫log d对应的路径,其实呢,并没有log这个文件夹啊,这个要注意,那log下面呢,咱们一般叫segment啊segment。Egment segment,每个segment大小呢是一个G,那它可以有多个,那segment与segment之间的命名要注意,它的命名呢,是按照这个up赛的索引,哎,最大的一个比如说比如这是零,那这呢是比如说到到99啊999,那这个呢,下一个就是1000。啊,这样去进行一个命名,方便后续的一个检索,那每一个S下面又有多个文件,这里面比较主要的文件,第一个文件叫dialog。
11:10
实实在在存储数据的,由于1G的文件呢,还是比较大。那这个时候呢,就引入了一个叫索引的index。OK,其实它底层还引入了一个叫时间戳。时间戳的目的主要是为了。是不是以后删除数据啊,哎,删除数据判断一个超时时间,其实在最新版的这个像二点叉系列的开发里面,还引入了一个叫快照,以前是没有的啊,以前是没有快照的哈,行啊,知道这儿就行了,这是三月份的。那好,那这里面有一个面试的考点。就是这个点index里面,它存储的索引,是不是对每一条文都进行索引呢?不是,那它有一个标准的叫法叫什么。稀疏索引啊对。
12:01
哎,有些面试官就问这个,那系数索引它到底是怎么存的呢?每存储4KB的数据,我记录一条,所以OK啊,就这么说的啊。那行,那存储机制,然后之后呢,是这个删除数据啊。过期把删除,那么卡夫卡里面默认保存数据的时间是七天。生产环境当中,一般情况下,像咱们这种项目一般是保存三天啊。后面你们讲相面时候也会说,那么像有个别生产线啊,这个不绝对,我想告诉大家什么事呢?个别生产线像VIVO OPPO他们在做LINK10书仓的时候啊,个别主题是调整成比如说七个小时。可以按小时进行保存,也就是说不是说这个数据啊,必须得保存一天啊,或者多久啊,保存几个小时也是没有任何问题的啊。根据你这个公司当中的一个需求,那那删除数据的时候呢,有几种策略,这是曾经一道面试题,几种啊。
13:05
两种啊,一个呢就是直接删除,另一个呢是压缩。那么删除。又有问题了啊,什么问题呢?就一个赛格的里面所有的数据是不是都过期了,把它删掉一点问题没有吧,哎,但是呢,一半过期一半没过期怎么办?哎,必须等所有的都过期了啊,把它干掉就完事了啊。那么压缩,那这里的压缩跟我们学的耐皮拉罗这个压缩有关系吗?没关系,那他手谓的压缩是怎么加的,哎,按照每一个K最新的value进行一个保存啊就可以,那这个呢,也是有一些特殊的应用场景啊。那再来下一个选哪了?高效读写对吧,高效读写。这道题非常高频啊,一定所有人都得会。
14:02
你说卡夫卡为什么能够做到高效读写第一条?它是集群,而且还采用了分区技术啊,分区分区的好处。化装哎,提高生产端和客位端并行度,同时在存储上可以把海量的数据无限的打散啊,进行一个存储啊。下一个。是不是稀疏索引呢?啊,就是稀疏索引。效率更高一些,那下面还有就是。想想超哥是吧,啊,啥情况叫顺序读写,那在买硬盘的时候买什么硬盘接硬盘就可以了。那再来一个。叫林拷贝和叶幻春。缓存?那夜缓存是谁的缓存?
15:01
是Linux系统内核的缓存一定要注意,那么卡瓦呢,它怎么做的呢?生产端发送过来数据直接放到这个Linux内核,然后呢,他可以根据他自己的一个内存分配是否持久化到硬盘,它可以在内存里面存啊,它会定期的往这里面写。那么这边这个消费端呢,消费出去的时候,哎,直接从这个网口啊里面一拉就行了,省去了你应用层代码,它能省去应用层这个缓存。主要的原因在什么?他根本在集群端,是不是就不处理数据啊,他所有的处理数据操作都在生产和消费,还记得生产和消费是不是都有一个叫拦截器。哎,也有对应的这个这个叫序列化器和反序列化器啊,那好,那我我再给大家出一个扩展性问题,看大家能不能搞定啊,就是未来你去生产环境,去企业当中有这样一个需求,我让你对卡夫卡做一个集群监控。
16:01
监控卡卡的运行情况。手写代码去写,能不能搞定?怎么做?哎,你们一般是在呃,两三百个人当中会有一个人就会遇到这种需求。能搞定吗?我相信高手应该是没有任何问题。只要你对这个卡卡的架构足够了解。它所谓的监控就是监控卡不卡的输入和输出,以及内部是存储到数据。那这些数据怎么能拿到呢?你是不是从拦截器里面想拿什么拿什么,拦下来之后是不是就啥事不干,直接往出写一个输出流,是不是就把过来的数据都打出去了。记个个数就可以了吧,对吧?哎,定一个计数器,那你就知道进来多少数据,包括卡法里面存了多少数据,以及消费端消费多少数据,完全是对你来说是透明的,那后面呢,我们再讲这个卡玛监控器的时候,你看人家开源写的是什么样的,如果你未来你自己能不能造一个啊,先抛一个伏笔啊。
17:10
再呢就是零拷贝啊和这个叶缓存。
我来说两句