00:00
我们已经了解了flink当中检查点保存的过程啊,这里有一个关键,就是保存的时间点,是所有并行的子任务都处理完同一个数据的时候,这个时候把他们的状态持久化,做一个保存,这就是我们所谓的checkpoint检查点。那前面我们已经提到了,弗林可运行的过程当中呢,周期性的触发这样的检查点保存,那一旦发生故障之后会怎么样呢?哎,那当然就是检查最近一次我们存盘的那个检查点,然后从检查点里边把所有的状态恢复出来,重启任务。啊,这个过程非常容易理解,所以接下来我们还是以同样的例子来考察一下从检查点恢复状态的过程,哎,那首先我们看到啊,现在处理到什么时候呢?之前我们是处理完三个数据的时候,做了一个检查点的保存,然后接下来继续进行处理,我们看处理到SS这里已经读到了第五个数据,又读了两个数,啊,那按照之前我们的说法啊,Hello word hello,前三个数后边跟着的应该是flink,然后又来了一个哈。
01:10
那这两个数都处理完了吗?诶,我们看到这里的状态其实是flink这个数据已经处理完了,我们看这里边有一个flink对应的K,它的抗值是一啊,然后输出了一个FLINK1,而对于后边跟着的那个哈呢,第三个哈还在处理过程中,这个时候刚好发生故障挂掉了。发生故障的时候,当前的状态其实是没有保存的,哎,那所以我们当然就只能从之前上一次成功保存的检查点里边去恢复状态啊,那当然接下来我们要恢复啊,做这个故障恢复的第一步,首先是得重启应用啊,就是某一个节点可能发生了故障,那接下来重启呢,有可能并行会发生变化啊,有可能我们进行一些资源的调整,然后进行重启,重启之后初始化的每一步操作啊,每一个任务里边的状态当然是初始的默认值啊,或者说我们这里边如果说只是偏移量,或者说一个count值的话,那就应该都是零嘛,都是空的。
02:15
那如果说我们直接就这样开始去进行处理接下来的数据的话啊,那很显然我们之前所有的数据相当于就丢掉了啊,之前统计的这些结果就都已经不存在了,我们是从零开始统计,这显然不对,所以应该从之前保存的检查点里边读取之前的状态。所以第二步就是读取检查点重置状态。我们从之前已经保存的这个检查点里面读取出来,发现,诶之前当时的状态是读取了三个数据,然后对应的统计出来的sum值,HELLO2WORD1把它先恢复出来。这个恢复完了之后呢,诶,我们会发现在外部的这个系统里边,数据源这里,它其实已经读完了五个数据,接下来的word这其实已经是第六个数据了,那如果直接基于这个word去读的话,那相当于从第三个数后边的第四第五两个数不就相当于丢掉了吗?哎,所以这里面还要做一个操作,那就是需要由SS任务重新提交它当前的偏移量,告诉外部数据源我需要从这个偏移量开始重放数据。
03:29
啊,这样的话,之前中间的那些没有保存的数据,也就相当于不会丢掉,还可以重新的处理一遍。所以接下来的第三步我们要做的是重放数据,哎,那这个有一个要求,当然就是必须外部数据源是支持重置偏移量的啊,就之前的数据是可以保存下来的啊,啊那如果说比方说像我们之前用到的这个测试的soet文本流,所有的数据是不进行保存的,那当然也就没有办法重置偏移量,哎,那就没有办法实现我们这里所有的数据不丢了,那现在的话,我们看重新提交偏移量之后,之前的第四第五个数据flink和哈就又回来了,重新可以再去做一个处理,那我们会发现当前的状态就其实已经恢复到了之前做检查点保存的时候。
04:20
当前完整的这个状态啊,就相当于时光回溯到了当时,那接下来当然就可以继续。读取后边的数据进行正常的处理了,哎,那首先我们把后边的第四个,第五个数据重放,然后进行统计,接下来呢,哎,继续读取后边的第六个数据,就好像整个这个过程当中没有发生过故障一样,整个处理的过程当中,我们既没有丢掉数据,也没有把中间的某些数据重复计算啊,因为我们现在处理到第六个数据的时候啊,诶,当前就是前面五个数里边哈,有三个word有一个link有一个,哎,这个过程计算结果完全正确。
05:02
那在分布式系统当中,这种特性就叫做实现了精确一次的状态一致性保证啊,这个精确一次有一个英文名称叫做exact once啊,那关于这一部分呢,我们会在后边啊,专门讲解状态一致性的时候再去详细展开。那这里我们还需要去强调一点,就是怎么样能够正确的从检查点里边读取出来我们想要的状态呢?哎,那就必须检查点这个保存的信息啊,不光是要保存我们每一个算子对应的状态内容,而且还得知道这到底是每一个算子,每一个任务的状态,所以其实这里面需要保存我们所有处理流程的拓扑结构。而这个拓结构呢,其实是可以在job manager啊,我们当时生成这个drop graph的时候,就可以直接分析得到啊,那另外呢,对于这个检查点,它是要做周期性的保存触发,那这个过程也是由job manager去进行触发的,所以我们说在整个这个检查点保存的过程当中啊,Job manager起到了一个中央调度的作用啊,这个过程当中必须有照manager参与,这就是。
06:15
从检查点去恢复状态的完整过程。
我来说两句