00:00
啊,然后我们分开来看,分成三块,生产,保存,消费,对吧,首先我们看生产,那生产这块我们需要了解的是什么东西呢?第一个写作方式。它是由生产者往那个博推的。还有同学说,之前还说什么卡夫卡是。基于拉动模式的,对吧,他这边又出现一个推,那你要注意啊,我当时说的卡夫卡基于一个拉动模式指的是哪个地方呀,是consumer那个地方吧,哎,是消费者那个地方,这不要混了啊,不要混了,对,然后他说每一个消息呢,都会到分区当中,就追加当中,然后我们之前看到的,我们说那个劳克斯啊。那个文件夹里边除了存放一些log,是不是还存放数据数据啊,那既然那log里面它是落盘的呀,是不是磁盘当中啊。对吧,而且之前讲了卡夫卡呢,它还要接入接入生长环境,放在实时的一个流处理当中,那你放在磁盘是不是很慢啊,你要注意它是属于开辟了一块完整的一个磁盘空间,然后呢,它整个的往里写呢,是往磁盘顺序写的。
01:09
啊,顺序写磁盘的一个效率比随随机写内存要高。啊,这块所以说它这个速度是有保证的,那这块这个东西感兴趣的可以看一看,你们磁盘内存,还有那个固态硬盘,它到底物理结构是什么样子的,对吧?啊可以去了解一下啊,了解一下这块的一个东西啊,有帮助,可以帮助大家理解这块的一个东西啊,就是物理层了,涉及到物理层了。看一看那个磁盘,呃,内存它的一个物理结构是什么样子的啊,物理结构是什么样子的这块好,然后它里面呢,就是。整个topic里边啊,它有分区有副本的机制的,对吧,有分区副本的机制的啊。那实际上我们写的是一个什么杠杠topic,就是就是生产者生产数据的时候。
02:03
只写到了topic吧,那实际每一条数据是不是写到了不同的分区啊,如果你有多个分区的话,对吧,写到不同的分区的,那整个的分区是这样的。整成了分区,他写是每个分区内干什么。维护自己的是区内有序。是分区内有序,而不是说他这三个区把数据加在一块是有序的,是不是跟我们之前学的那个什么那块东西是一样的呀,哎,是分区内有序,它分区自己每一个自己的offet呢,都是从零开始的。哎,自己维护的,然后追加来了一张数据呢,它往上增。往上走是这样的啊,整个过程他的一个off这样管理的,然后生产者可以往那边写,然后后面你的消费者可以消费吧,那消费者他也有维护自己的一个office赛的。我用自己的。啊,这个数据是磁盘的,不要不要听着他好像是消费者消费数据应该就没了,对吧,不是的。
03:05
不是的啊,他虽然叫消费者,但是他把数据读过来之后,那个数据还在啊,数据还在,不要看他叫消费者就没了啊,就说这个数据呢,可以被重复读的。刚才其实我们已经做测试都测过了吧。我们生产者生产数据第一次能打印,我刚刚服上beginning的时候,是不是又打印了呀,对吧,我再服装beginning,它又打印了一次吧,啊所以说这个数据啊,它是在磁盘存的啊,消费者消费数据呢,是针对于你当前这个消费者来说的。啊,那些消费者他维护了一个ET,也就是说这个地方他既然两个什么消费者来消费,这个里边数据说明这两个消费者肯定不是。一个组的吧,哎,肯定不是一个组的,这块要注意一下。啊,这块呢,就是说每个分区都是有序的不断的追加,然后赋予在每一个消息,注意这每个消息呢,都在分区内赋予一个唯一的一个三的值了,那分区之间你看。
04:02
都有为二的吧,所以说这个唯一性啊,指的是分区内啊,分区内啊。那分区的原因之前提过了吧,一个是考虑到卡卡集群里边你减降低每某一个博的一个负载,那读数据的时候是不是可以提高并发呀?哎,这块已经提过了啊,这块东西需要大家记一记的,面试题当中会问的啊,然后我们看一看它到底是按什么分区的呢?对吧,你说分区它到底随机的还是怎么来的,它有三种,三种怎么来的呢?首先你可以干什么呢。自定义一个分区类,跟那个map一样,Me是不是你可以写一个自定义的分区类啊,然后按照你的一个分区规则来了,也就是说你可以指定它的一个分区。假如说你那个分区方法里边写的返回值瑞特零,你就写的特零,而且你在生产者那块呢,又用了什么。
05:02
你自定义的分区,那所有的数据都会到零这个分区了,能懂这个意思吧,就是你自己指定了第二种没有指定。但是你指定到K。就是说它那一条一条的消息啊,也是KV的形式,也是KV的形式啊,KV的形式啊,如果你指定了K,它是根据什么。K的哈希。然后模拟你的分区数。啊,就是跟那个什么Mar那个分区一样的吧,他用的默认的也是哈希分区,哈希分区啊,然后如果说。连K都没指定,就是说你partition也没指定,你K没有,也就光秃秃的一个value,那它是怎么来的呢?它通过这种轮巡的方式。啊,轮询的方式是为了更好的做负载均衡吧,哎,作为归小更好的做负载均衡,那这一块是它核心的一些代码啊,核心的一些代码,这个其实还不是特别底层的一个代码,因为我们之前提过它特别底层一个代码拿什么写的盖写的啊,特别底层的一个代码,其实这是提供了一套Java的一个API啊,Java的API,因为它也提供了一套Java API来调用的。
06:14
啊,这用呢,这块是它核心的一个代码,其实这里边就是这三个逻辑啊,这三个逻辑啊,要记得啊,要记得这些东西啊,就是需要大家记得,我会在课堂当中给大家提出来,是不是这个要记啊,还有这个啊,就是它这个分区规则啊,到底怎么来的啊,到底怎么来的,那后面呢,我们API操作的时候。哎,我们也可以指定它什么,我们也会讲那个自定义分区啊,自定义分区这种方式啊。然后还有一个是日本。这个副本呢,就是之前也提到过。一提到过,你看如果没有副本的话,博当期之后,所有的数据都不可被消费,因为你挂了,他要找你这个leader啊,对吧,那副本就是做备份用的,做备份用的leader挂了呢,他要代代替leader来工作的啊,代替leader来工作的是这样的啊。
07:04
好,然后就是呃,Leader跟follow,或者说follow之间,它都不可能在同一台机器。这个要记住的对吧,哎,这个要要知道的,OK,然后我们看一下这个整个的一个写入流程。啊,它到底是怎么写入的啊,这里边儿还有一个机制需要跟大家提到啊。这是整个的精华的一个内容。Producer,然后卡挂机群,当然我把这个卡挂机群单独拿出来,这是一个东西啊,这是一个啊,单独拿出来一下,单独拿出来一下,那这个干什么事呢?就是生产者,他会到时候我们会看见它会调用一个散的方法发送出去,往某一个topic里面发送出去,他首先去卡卡集群。就是brook list,当时我们写的那个伸展者是不是有一个参数叫杠杠brook list呀,他去brook list里边获取到一个partition的一个leader。
08:00
那我们知道生产数据,生产数据的时候是不是你KV都定了呀,或者说你指定了分区的话也定了吧。就是说这条数据其实某一个分区肯定是要写到某一个分区的,这能理解吧,哎,那他要找的是这个分区的力量。分区的leader,哎,他就是从这个book list里边去拿到这个分区的一个leader啊,然后之后呢,就跟这个leader进行。交互啊,跟leader进行交互的啊,将数据写到leader,写到leader OK,那这个后面这个follows具体什么时候来同步呢。它里面有一个机制叫A应答机制。A,一拿进制这块呢,它有三个,就是说你在生产者可以设置一个参数,就是那个AC。这个AC呢,它有三个值,零,一和。Or?那零是什么意思呢?就是说我不producer,不需要你确认消息。
09:05
我直接就管我发就就完了,Leader有没有收到不管leader有没有收到的不管,哎就是零,那这样你想想看是不是速度非常快啊,我我produce只管发对吧,但是安全性呢。不高吧,离的你都不管,那的数据都没收到,你那follow数据能有吗?他主动的去获取的,对吧?哎这个呢是很快,但是呢,它那个什么安全性最低,安全性最低,那还有个一,那大家猜一下一什么意思呢。只要leader的应答就够了。就是说立确保leader写入成功,我接着发下一条,我接着发下一条,啊是这个意思,不管follow落,你follow落有没有同步,那我不是六不等了,已经等了,那你想想看这个二呢。
10:00
就所有的一个副本。都备份完了,都写入成功了,然后呢,这个follow会给发送一个。AK,然后leader会告诉这个produce,哎,我这个leader跟这个follow都写完了,那写完了之后你接着发下一条是这个意思,那对比起来。就知道这个012。就是一个是效率问题,一个是安全性问题啊,一个安全性问题,那这块有人做过测试,就是这个。零跟这个二两个副本的时候啊,两个副本的时候,就是这边只需要同步一次,十倍效率。效率十倍,就是说设置为零的时候,不用应答机制的时候,比例二。要快十倍要十倍啊,效率差距很大的啊,效率差距很大的,那这一块它有一个什么样的面试题呢?面试题当中会被就说如何确保producer不丢数据,生产者这边不丢数据。
11:02
其实就是这个AK机制设置为二啊,设置为二就行了。设置为二就行了啊,那这块就是它的一个AK机制,AK机制啊,你看这块它是什么。用的什么?或啊自己去获取啊,哎,自己去获取,获取完了之后,它会发送AK,那这个leader收到所有的副本。才会向producer发送一个A,然后producer才会接着往下生产嘛,往下生产,那整个的图上表示的是A等于什么?等于all这种啊,哎,等于all这种,这要知道的啊,面试题当中他怎么问,他就说produce,如何保证这个producer生产数据的时候啊,不丢数据,不丢数据啊,其实就是问的这个AK的一个应答机制,那这一块到时候我们写API的时候,能具体的看到这三个值,同样的三个值的一个描述呢,也都能看到啊,在源码里边就有就有相应相应的一个解释啊,这块要注意一下,对,这是整个一个写入的一个流程啊,写入的一个流程啊,这块也有相应的一个什么。
12:10
用文字的一个描述啊,文字的一个描述。那个网络。
我来说两句