保存点要求和初步说明
保存点存储两件事:(a)所有数据源的位置,(b)运算符的状态。保存点在许多环境中都很有用:
- 轻微的应用代码更新
- Flink 更新
- 并行性的变化
- …
从版本 1.3 开始 (也适用于早期版本):
-
必须启用检查点才能使保存点成为可能。如果你忘记使用以下方法明确启用检查点:
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.enableCheckpointing(checkpointInterval);
你会得到:
java.lang.IllegalStateException: Checkpointing disabled. You can enable it via the execution environment of your job
-
在使用窗口操作时,使用事件时间(摄取或处理时间)来产生适当的结果至关重要;
-
为了能够升级程序并重用保存点,必须设置手动 uid 。这是因为,默认情况下,Flink 在代码更改后更改运算符的 UID;
-
链式运算符由第一个任务的 ID 标识。无法手动将 ID 分配给中间链接任务,例如在链[a - > b - > c]中,只能手动分配 ID,但不能分配 b 或 c。要解决此问题,你可以手动定义任务链。如果你依赖自动 ID 分配,链接行为的更改也将更改 ID(请参阅上面的点)。