Flink
Checkpoints vs. Savepoints

从概念上讲,Flink的保存点不同于检查点,就像传统数据库系统中的备份不同于恢复日志一样。
Checkpoints
检查点的主要目的是在发生意外作业失败时提供恢复机制。检查点的生命周期由Flink管理,即检查点由Flink创建、拥有和释放,无需用户交互。因为检查点经常被触发,并且依赖于故障恢复,所以检查点实现的两个主要设计目标是:
1)创建的过程是轻量级的
2)能够用来及时的恢复
如果用户终止应用程序,则自动删除检查点(除非将检查点显式配置为保留)。
检查点可以保存到特定的一些state backend中。
需要恢复的作业逻辑上不会有修改,否则需要使用保存点
Savepoints
虽然保存点是用与检查点相同的机制在内部创建的,但它们在概念上是不同的,并且产生和恢复的成本会更高一些。它们的设计更侧重于可移植性和操作灵活性,特别是在任务逻辑更改方面。例如Flink版本的更新,更改工作图(代码业务逻辑),等等。
保存点的处理需要通过手动操作。
保存点仅由用户创建、拥有和删除。这意味着,Flink不会在作业终止或恢复后删除保存点,同时保存点独立于 state backend 的格式存储。
注意:从Flink 1.15开始,保存点也可以以特定于后端的本机格式存储,这样创建和恢复起来更快,但也有一些限制。
保存点操作示例请移步上篇文章Flink 实战 | 命令行实战看这篇就够了!
Capabilities and limitations
| 操作 | 规范保存点 | 本地保存点 | 对齐的检查点 | 不对齐的检查点 |
|---|---|---|---|---|
| 状态后端更改 | ✓ | x | x | x |
| 状态处理器API(写入) | ✓ | x | x | x |
| 状态处理器API(读取) | ✓ | ! | ! | x |
| 独立和可重新定位 | ✓ | ✓ | x | x |
| 模式演化 | ✓ | ! | ! | ! |
| 任意升级工作 | ✓ | ✓ | ✓ | x |
| 非任意性工作升级 | ✓ | ✓ | ✓ | ✓ |
| Flink小版本升级 | ✓ | ✓ | ✓ | x |
| Flink错误/补丁/版本升级 | ✓ | ✓ | ✓ | ✓ |
| 重新缩放 | ✓ | ✓ | ✓ | ✓ |
状态后端更改 -- 配置创建快照时可以使用的不同状态后端。
状态处理器API(写入)-- 通过State Processor API创建这种类型的新快照的能力。
状态处理器API(读取) -- 通过State Processor API从已有的这种类型的快照读取状态的能力。
独立和可重新定位 -- 一个快照文件夹包含了恢复所需的一切,它不依赖于其他快照,这意味着它可以很容易地移动到另一个地方。
模式演化 -- 如果使用支持模式进化的序列化器(例如pojo和Avro类型),状态数据类型可以被改变。
任意升级工作 -- 即使现有操作的分区类型(rescale、rebalance、map等)或运行中的记录类型发生了变化,也可以恢复快照。
非任意性工作升级 -- 如果作业图拓扑和运行中的记录类型保持不变,则可以使用更新的操作符恢复快照。
Flink小版本升级 -- 使用旧的Flink小版本拍摄的快照 (1.x→1.y) 来进行任务恢复。
Flink错误/补丁/版本升级 -- 使用较旧的Flink版本拍摄的快照来记进行升级。(1.14.x → 1.14.y)。
重新缩放 -- 使用与创建快照时不同的并行度恢复快照。
动动小手

关注我们




