最近面试问的最多的就是Flink如何进行容错的,总结一下关于checkpoint的知识点
1、checkpoint是什么
将任务运行时的状态做一个快照,保存到稳定的存储系统中,当任务发生重启时,可以从保存的状态中重新恢复任务。
原理可以这么理解,当数据x从source出发的时候,JM会给x一个令牌,告诉x已经被监视,x把令牌展示给经过的operator,operator就把自己对x的state进行汇报到JM(持久化),一直到最后,JM收到所有的反馈后,就认为x已经完成了。如果x还没完成,任务就挂掉了。在从checkpoint恢复的时候,是从最近的一次(可指定,一般用最近的,除非你最近的有问题,你要回滚)checkpoint恢复状态,告诉任务x走了那一步,到什么位置了。
2、checkpoint存的什么
一般来说存储的是state的数据,另外也可以保存kafka的offset(数据重放)
同时既然存储的是数据,那么也需要进行定期清理。
3、checkpoint存到什么地方?
三种存储方式:
第一种是基于内存的,叫做MemoryStateBackend,将状态维护在jvm的堆中,默认大小为5M,一般用于本地测试,或者较小数据规模的场景,问题是一旦任务失败死掉是无法恢复的。
第二种是基于文件的,叫做FsStateBackend,一般将数据维护在hdfs中,TM的状态数据存到hdfs