00:00
接下来呢,我们再给大家讲一个福林可里边比较有有趣的,也是比较强大的一个功能,叫做保存点,保存点放在这里一起讲,主要就是因为它跟检查点的机制和原理基本上是完全一样啊,甚至有些时候大家可以认为就差不多啊,它就是一回事啊。那所以弗link里边呢,是提供了一个自定义的镜像保存功能,这就是所谓的save point,呃,就是保存点这样的一个概念。从原理上来讲,呃,就是检查点和这个保存点其实是完全一致的,那么原则上讲呢,创建保存点的这个过程和算法跟检查点也是基本上是一样的,那大家可以认为保存点就是有了一些额外原数据的检查点,所以这里边我们就不详细展开讲它的这个原理了,我们主要是讲啊,大家就想这个它的用法到底是什么啊,前面我们说这个检查点,大家说检查点是干什么的?这就是做存盘,然后发生故障的时候自动恢复对吧?所以大家注意这个检查点需要我们自己去做触发嘛,大家看前面是draw manager自己就直接发出那个保存这个检查检查点的指令,对吧?那这个是是是它必须有一个触发机制,还是说它自动就有一个,比方说周期性隔一段时间触发一次呢。
01:21
它是自动的啊,对周期性的,隔一段时间专manager manager那边就会触发一次当前这个检查点的保存操作,所以大家可以认为检查点checkpoint就是一个自动存盘,自动保存,自动存档对吧?诶那对应的这个保存点呢,C point呢。就是手动存盘嘛,啊,所以大家注意它的区别就在于。Flink不会自动给我们创建保存点,你如果想要创建一个保存点的话,必须明确的就是指定我现在要做一个检查点的保存,对吧,那这个检查点的保存的话也非常简单,就是你通过我们那个flink命令啊,直接flink去去做一个那个point的保存就可以了。
02:08
这里面主要的区别就在于那那保存点有什么用呢?其实保存点是很强大的,从原理上看它跟checkpoint一样啊,所以大家就会想到,那自然也可以做这个故障恢复对吧?啊,就是我可以做一个这个手动的存盘,然后之后我恢复的时候呢,就恢复到我当时想要的那个时间点上啊,所以保存点可以用来做故障恢复,那它的这个存盘点一般就是一个有计划的手动备份了,就是特殊节点对吧,比方说这是一个呃,里程碑式的一个时间节点啊,我把这个当前的状态保存一份之后,如果要回滚的话,故障恢复的话,有可能直接是恢复到这个状态啊,这是保存点可能最常见的一种应用,那另外保存点呢,其实能做的事情还很多,大家看它可以直接更新应用程序,这是什么意思呢?
03:00
大家就会想到当前我的这个应用,大家会发现啊,如果我里边的这个业务逻辑不发生大的变化啊,就是比方说我当前的这个每个每个任务,我分配出来的这个任务还是原原来的这个任务,然后里边的状态呢,定义的还是原来的状态,那大家想里边的一些细节的逻辑变化,是不是不会影响我最后保存的检查点啊。但想想是不是这样?你说我最后保保存的这个检查点保存点啊,他最后其实是个啥呀。是不是就是一堆状态的一个集合,然后这个状态最后我的信息就只要知道哪个任务有什么状态,是不是就完事了,所以我在代码里边只要任务的这个dag结构啊,先做什么后做什么,这个不变,然后对应的那个状态。本身状态的定义就是名称和类型也不变,那是不是大家想我最后保存下来就是一样的东西啊,所以它可以做应用程序更新,就是假如说我发现之前的那个代码里边有点小bug,对吧,有点bug,大家想如果我要是想重新跑一遍,那怎么办呢?我们之前的那个呃,实时的处理啊,实时统计都已经上线运行了,之前都经做了好长时间了,然后现在我又要又要更新一下程序啊,这个fix一下bug,那那这个时候我要是重新上线程序,难道是要重重新跑之前的所有的全量数据吗?
04:25
不需要,你只要手动的做一个保存点,然后接下来你的这个只要程序结构就是状态没没有做变化,对吧,那我就可以直接从之前保存的那个保存点去启动一个新的程序。然后就可以继续之前的那个状态,继续往后处理数据了,所以大家看这个就特别好用是吧?呃,只要有那个某某一个这个时间点的状态就可以重新启动程序,甚至这个程序改,改过这个程序都可以对吧?那那这个首先是关于我们的代码应用程序可以更新啊,那对于这个flink版本可以更新吗?也可以,大家看基于这个就可以做flink版本迁移,比方说我们之前用的是1.9,现在升级到一点十,对吧?啊,未来升级到01:11 01:12,那如果说这个时候我们本身已经上线跑了一段时间,难道更新升级这个弗link版本的时候,我要全部把那个数据重新重放,重新运行吗?哎,没必要,因为大家知道核心的这个flink本身核心的机制都没给,对吧,我的代码的那个任务结构和状态的保存是不是也都可以不变啊,对吧,这些都没有影响,所以我就直接可以基于之前的一个保存点把flink版本升级。
05:41
新了之后,用一个新版本的flink再去提交当前的这个drop,从那个保存点启动,对吧?大家记得我们之前提交那个drop的时候,在那个web UI上是不是有一个当时我们一直没填的一个参数,是不是就是保存点啊,那个保存点是什么呢?就填一个我们当时写的保存点的那个文件路径就可以了,对吧?就就传一个路径就可以,因为大家想它跟那个checkpoint一样嘛,你保存在那个文件系统里面,直接把那个对应的读取出来就可以了啊。另外还可以做一件事,就是做。
06:14
应用的暂停和重启,这个主要是用来干什么的啊,这是在有一些特定场景下,我们公司里边,呃,这个资源有限,集群资源很紧张,那大家可能会想到当前的这个集群里边,我如果要运行着一些,就是可能没那么重要,然后当前那个数据也比较也比较稀疏,对吧,数据量没那么大啊,呃,有一些这些边边角角的一些小应用,它占据了一些资源,导致我现在呢,有非常紧急,数据量非常大的这个核心应用跑不起来。诶,那这怎么办呢?我可以把之前的那些小应用,不重要的小应用先暂停,给它保存一个保存点,对吧?保存一个保存点,把它停掉,然后是不是就可以释放资源了,我先跑那些更重要的更紧急的任务,跑完了之后,诶那边是不是也可以释放出资源了,然后我接下来再从之前的那个保存点重新启动,是不是继续处理就完事了?
07:11
啊,所以这个在实际项目当中,就是它的这个用法还是很灵活的啊,有很多这种花花式的用法,大家都可以在以后的生产时机当中去尝试。
我来说两句