00:02
好,那这个时候问题来了。就是说这种情况,假如说有一个这种情况在这。我leader呢,写了十条数据。OK吧,我接下来有一个follow写了八条,有一个follow呢,写了九条。但是按照之前列挂之前的一个情况。这个啊,反而之前所有的情况同步的都比较快。这两个都在里边。也就是说,这个leader此时挂掉,他们俩被选为leader的可能性都有。都有,好,那这个时候问题来了,假设他被选为了leader。会出现什么问题?
01:05
会出现什么问题啊,是不是F2这个数据跟我这个数据不一致了呀。对吧,或者说这个可能大家比较难理解,那你选这个选他能力的不就行了吗?那我们说这种情况。的。好,我就选你当地的可以吧,大家认为就选多的吗?大家都在同步队列里面,我选多的对吧?好,我选米。选完之后不好意思诶。活了。对吧,是不是跟刚才我们描述的那种现象一样啊。一个八九,一个90。对吧,那你将来由于多挂几次,假如说这个数据多挂几次,那你这个。是不是三个副本?将来的这个存的数据异常的混乱,对不对,数据存储方面,大家存的数据都不一样了,你这里面好好的多一条,我这里面什么,有时候假如说你挂掉了,我又多一条。
02:07
对吧,是不是各种数据都存在不一样啊,那这个是不是有问题啊,你将来消费的时候,是不是大家消费的数据都不一样,对吧?假如说你到leader的时候,我从头消费,诶消费的是十项数据,你当leader我从头消费,消费的九条,那用户不疯了吗?对吧?所以说这里面呢,他还有一个。一致性的问题,就是说为了保证这个数据存储的一致性,能理解这个事儿,刚才这个存储方面我们说的,如果真的自由的让它发展的话,是不是存储方面这个数据是混乱的呀?啊,它有一个一致性的问题,那这里面呢,就提到了两个概念,一个叫SW,一个叫Leo。W呢叫high water叫高水位,一个叫Leo Leo叫and。就指的是最后一个不在了。这个好理解一点吧,啊,就是定义了两个名词,一个呢叫Leo,那你看啊,钢前一个leader的两个follow,他是不是都有一个自己的Leo啊。
03:07
就是表示了当前离子里边最大的,刚才我们举的例子是十八九,那Luo就是十八九,能理解这个事没问题吧,啊,最大的好,那Leo放在这就行了呗,还有一个高水位,那你看高水位这个地方。有什么特点,最小叫最小的那个值,对吧?啊叫最小的那个值,好,那这个里边呢,来看一下,它指的是最小的值,大家从面上能观察到了,它实际上表示的意义叫。可见数据的最大的。也就是说,我说consumer是找你leader进行什么拉数据,但是你里面有19条,我获取不到19条,我现在只能获取到12。
04:05
啊,你有时就聊不好意思,我获取不到,就是说这个卡不卡,整个集群对于消费者所暴露的最大的是12这个数据。而不给你暴露什么。19啊,这个呢,是我们所讲的,为了保证也是一个一致性,保证消费数据的一致性,我们想一下他为什么要搞一个这个高水位来假设没有高水位设啊没有高水位,那消费者找这个leader获取数据是不是能。获取到19没问题吧,好,接下来我同步的时候就同步到这。你挂掉了。我接下来消费者是不是应该去消费20。对吧,或者说我去消费19,假如说19还没消费,我是不是拿着19去消费或者20对吧,我消费到这个位置是一定我假如说超过,只要超过12万。
05:01
因为如果没有HW,是不是我可以超过12任意一个数字都可以,只要19比16小的啊,我可以消费到这个数字,假如说我就是18 19随便啊,我假如说就第一个18。好,你的挂掉了,我接下来是不是,假如说把你选为了什么。我是不是找你要18这条数据。没有,我压根就没找数据,搞错了。嗯。就报错了啊,就报错了,所以这个就有问题了啊,所以呢,他弄了一个什么。高水位,诶保证我这块呢,大家都同步到当前这个数据了。啊,都同步到这儿了,那我就把这么多数据对消费者去干什么。去暴露,因为你此时消费者最大的能看到这儿随便挂。对吧,随便挂,挂了之后,我随便哪个杠一的,我是不是都可以接这条边,对吧,你继续往里写是不是十三十四十五啊对吧,做这个事。
06:04
对吧,啊。是数据丢失啊,我没说,我只是说的这个SW保证的是消费者消费数据的一致性,我有说保证的数据不丢失吗?数据不丢失,谁来管啊?AC吧,如果你你的意思是数据不丢失,那你AC等于负一的时候,等于什么?负一的时候是不是这个数据13,它就给你接着发一份。那不就保证数据不丢失吗?我现在是消费啊,刚才ad保证的是生产消息的。不就是啊。能区分开吗?把它区分开啊,那你这块你如果akp的负一,我消费到12,接下来你挂掉了。我从13开始写。那数据没丢失吧。对吧,跟消说的丢不丢跟消费者有关系吗。
07:02
跟消费者没关系啊,你存的数据丢不丢跟消费者有关系吗?一点关系都没有,我想这块什么HW会保证这个数据不丢失啊,不是这个意思,不是这个意思啊,这个呢他无法保证,但是他能保证是消费者在消费数据的时候,能保证消费者的数据的一致性,对吧?啊,因为我最大的大家都一样,都到了这个值,无论你这个时候挂掉了,我是不是重新从这个地方接着消费啊,对吧?啊,丢不丢是ACK的问题,ACK如果配的是零,那不好意思,这个数据就丢了。那因为你这个已经写完了。写完了不用AK是不是生产者那边不会重试啊,不会重置这个数据就不会再发一份吧,那接下来我这个13是不是接着还是按13存,但是就相当于是你这里边的20的这条数据是不是。这没问题吧,啊,这个只能保证消费数据的一个一致性。啊,消费书记这个HW好,接下来还有一个问题没解决,就是我们之前引入的那个问题。
08:02
存储数据一致性问题吧,虽然哎,你是当leader了,12我又活了,你这13~19怎么办?对吧,如果说你不管不处理的话,是不是我这里吧,我发了,此时又发了一个爱的硅谷过来了,你是leader,你想的leader达好艾德硅谷是他的13,是他的什么20,那这个不混乱了吗。对吧,啊,为了做这个事儿,所以他在重新选择一个leader的时候,新官上任三把火是吧,给所有人发一个消息。这干什么事了?要截取了啊,要截取了啊,要截取了,这意思。对,截取到哪呢。
09:00
是。截取到哪呢,对吧,啊leader故障之后选一个leader为保证。就大家都统一一下,都统一下直接截取到哪了,高水位。啊,你长了就给你切掉是吧,就这意思。不是吗?长了就给你切掉嘛,对吧,不行,大家的标准得统一了,对吧,要不然以后的工作不好不好做,不允许个人主义是吧。是这个意思啊,也就是说它这里面呢,假如说Li的发生故障。啊,发生故障,那我们所说的你直接新leader的起来了之后,对吧,会选取一个新leader之后呢,为保证多个副本之间数据一致性的一个问题,这一块的一致性讲的是什么。
10:01
存储的一致性能理解一个意思对吧?啊,存储方面一致性,那所有的人呢,都截取到当前的高水位这个位置啊,其余部分然后从干什么。新的leader这去过去。啊,也就是说首先是这样的,因为是这种情况。假设你被选为leader的啊,我呢,自己就干什么不接了,对,他是老大呀,对吧,他是老大,他不行,他就告诉其他人,你先干什么到。你先签一下,签一下,但是你要少一点怎么办?来补上补上。啊对,多退少补就这意思啊,就给你补一点是吧,啊就都这个事啊,就这事,那这样是不是能保证接下来我十十六,你是不是16,你是不是16了,对吧,数据一致性啊,所以呢,这个HW高准位这块啊,做了两个事情都是保证数据一致性的,第一个HW它本意叫指消费者可见的最大值,最大的的值,它保证的是消费者消费数据的什么。
11:12
一致性,第二方面他还提供了一个leader的故障的时候,新leader的选举的时候,给其他的follow网,因为我是新leader的,其他人所有的人都是follow板啊,给其他人发一个消息说截取到SW这个位置,然后呢,你如果说少了你去干什么,同步一下啊,同步过来跟我一样,跟我一样,所以这块还注意了一个点,就这块呢,只能保证副本之间数据一致性问题,并不能保证数据丢不丢。并不能保证数据丢不丢的问题,或者说重不重复的问题。对吧,他该重复还重复,该丢还丢,丢不丢,重不重复,看你ad是怎么配的,跟我这个HW一点关系都没有,能理解这个事。想一下啊,不是说这块我截取了,或者说我同步到这儿之后,他就一定不会丢数据啊,或者说他一定不会重复数据啊,那你看啊,这个时候就会重复数据了。
12:05
如果说它等于所有的等于什么?负一的时候,我此时发送了。这七条数据,七条数据呢,你同步了三条,写完了三条啊挂掉。是不是没有收到A,是不是又把这七条干什么?重新发一份,由于你刚才的机制是这样的,先截到12,然后大家都报什么。15、前面三条数据大家都都都有了吧,好,都有了之后,接下来是不是又把这七条补上,是不是这三条都干什么重复了吧?也就是说HW决定的是数据一致性问题,它不能解决重复和。丢失问题啊,它是两个概念,A是解决的是什么。丢失和重复问题吧,啊,但是这款HW这块呢,是我们所说的什么。一致性问题,两个一致性,消费一致性和什么存储方面的一致性嘛,啊这两个一致性要知道一下啊,知道一下也是这个这个呢,都是在哪,针对哪个里面呢。
13:07
IR里边的啊,这个里边leader follow都是里边的,因为将来是他们之间有可能被选,为什么leader吗?啊,有可能选为leader,在这里边选一个新的leader,然后他才有权干这个事啊,就leader对吧。
我来说两句