Apache flink Flink是否使用检查点/保存点类变量?

Apache flink Flink是否使用检查点/保存点类变量?,apache-flink,flink-streaming,Apache Flink,Flink Streaming,如果Flink应用程序在发生故障或更新后正在启动备份,则不属于KeyedState或OperatorState的类变量是否会持久化 例如,Flink文档中描述的BoundedAutoFordernessGenerator有一个currentMaxTimestamp变量。如果更新Flink应用程序,currentMaxTimestamp中的值会丢失,还是会写入更新应用程序之前创建的保存点 这样做的真正原因是我想实现一个自定义水印生成器,如果源空闲时间过长,则在生成水印时切换到处理时间。但是,我希望

如果Flink应用程序在发生故障或更新后正在启动备份,则不属于KeyedState或OperatorState的类变量是否会持久化

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

这样做的真正原因是我想实现一个自定义水印生成器,如果源空闲时间过长,则在生成水印时切换到处理时间。但是,我希望在更新或失败后,基于类变量重置为其原始默认值(在我上面提供的链接的示例中为Long.MIN_值),检测应用程序是否重新联机。这样,我可以确保水印生成器不会将花了五分钟的应用程序更新误认为源空闲了五分钟


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

只有由Flink显式管理的状态才会被保留--因此,是的,从快照还原时,
currentMaxTimestamp
中的值会丢失。快照中也不包括当前水印

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

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

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

感谢您一如既往的快速响应!