之前说过Flink通过检查点,用来在故障发生时重新处理记录,从而修正状态。Flink用户还可以通过另一个特性有意识地管理状态版本,这个特性叫做保存点。
保存点和检查点的工作方式完全相同,只不过它由用户通过Flink命令行工具或者Web控制台手动触发,而不是由Flink自动触发。和检查点一样,保存点也被保存在稳定存储中。用户可以从保存点重启作业,而不用从头开始。保存点可以被视为作业在某一个特定时间点的快照(该时间点即为保存点被触发的时间点)。
对保存点的另一种理解是:它在明确的时间点保存应用程序状态的版本。这和用版本控制系统保存应用程序的版本很相似。最简单的例子是在不修改应用程序代码的情况下,每隔固定的时间拍快照,即照原样保存应用程序状态的版本。
保存点可用于应对流处理作业在生产环境中遇到的许多挑战。
(1)应用程序代码升级:
假设你在已经处于运行状态的应用程序中发现了一个bug,并且希望之后的时间都可以用修复后的新版本来处理。通过触发保存点并从该保存点处运行新版本,下游的应用程序并不会察觉到不同(当然,被更新的部分除外)。
(2)Flink版本更新:
Flink自身的更新也变得简单,因为可以针对正在运行的任务触发保存点,并从保存点处用新版本的Flink重启任务。
(3)维护和迁移:
使用保存点,可以轻松地暂停和恢复应用程序。这对于集群维护以及向新集群前一的作业来说尤其有用。此外,它还有利于开发、测试和调试,因为不需要重播整个事件流。
(4)假设模拟与恢复:
在可控的点上运行其他的应用逻辑,以模拟假设的场景,这样做在很多时候非常有用。
(5)A/B测试:
从同一个保存点开始,并行地运行应用程序的两个版本,有主语进行A/B测试。
Flink内部的检查点机制以保存点的形式呈现给用户,用来应对上述挑战。这反映了Flink检查点本质上是一个可持续升级状态版本的可编程机制,这一点很像具有多版本并发控制的数据库系统。
网友评论