Flink checkpoint/savepoint class 有变量吗?

Does Flink checkpoint/savepoint class variables?

如果 Flink 应用程序在失败或更新后重新启动,class 不是 KeyedState 或 OperatorState 明确一部分的变量是否持续存在?

例如,Flink 文档中描述的 BoundedOutOfOrdernessGenerator 有一个 currentMaxTimestamp 变量。如果更新 Flink 应用程序,currentMaxTimestamp 中的值会丢失,还是会写入应用程序更新前创建的保存点?

真正的原因是我想实现一个自定义水印生成器 (similar to this),如果源空闲时间过长,它会在生成水印时切换到处理时间。但是,我希望根据 class 变量重置为其原始默认值(例如 [=24= 示例中的 Long.MIN_VALUE ] 我在上面提供了)。这样,我可以确保水印生成器不会将耗时五分钟的应用程序更新误认为源空闲了五分钟。

此外,如果应用程序更新,Flink 是否会重新启动每个水印生成器运算符,即使未对水印生成器进行任何更改?

只有 Flink 明确管理的状态才会被持久化——所以是的,currentMaxTimestamp 中的值在从快照恢复时会丢失。当前水印也不包含在快照中。

我认为您可以做的——尽管我还没有尝试过——是让您的水印生成器实现 CheckpointedFunction 接口。然后你可以实现这两个方法:

public void snapshotState(FunctionSnapshotContext context)
public void initializeState(FunctionInitializationContext context)

initializeState 方法中,您可以访问 context.isRestored(),它可以让您知道是否从快照重新启动。