在本文中,笔者将阐述在Flink中 Savepoint 和 Checkpoint 二者的不同点以及它们的应用场景。
Savepoint和Checkpoint分别是什么?
Savepoint 是用来为整个流处理应用在某个“时间点”(point-in-time)进行快照生成的功能。该快照包含了数据源读取到的偏移量(offset),输入源的位置信息以及整个应用的状态。借助 分布式快照算法(Chandy-Lamport )的变体,我们可以在应用程序运行中得到某个“时间点”一致的快照。
Savepoint由一个目录以及一个元数据文件构成。其中目录中通常为一个很大的二进制文件,文件中包含了整个流应用在Savepoint或Checkpoint的状态。另外元数据文件通常相对较小,其中包含了指向Savepoint目录中各个文件的指针。
上面关于Savepoint的介绍与Checkpoint很类似,但是二者还是有一些不同点的。
首先Checkpoint 是 Flink 用来从故障中恢复的机制,它快照下了整个应用程序的状态,当然也包括输入源读取到的位点。当应用发生故障时,Flink 将通过从 Checkpoint 加载应用程序状态并从恢复出的历史读取位点继续应用的处理,就像什么事情都没发生一样。
SavePoint和Checkpoint的3个不同点
Savepoint 和 Checkpoint 作为 Apache Flink 中的两个非常独特的两个特性,它们在实现中看起来也很相似,然而二者之间也有不同的地方,主要包含如下3点: