apache-flink - Flink 检查点/保存点类变量吗?
问题描述
如果 Flink 应用程序在失败后启动备份或更新,是否保留不明确属于 KeyedState 或 OperatorState 的类变量?
例如,Flink 文档中描述的 BoundedOutOfOrdernessGenerator 有一个 currentMaxTimestamp 变量。如果更新了 Flink 应用程序,currentMaxTimestamp 中的值会丢失,还是会写入应用程序更新之前创建的保存点?
这样做的真正原因是我想实现一个自定义水印生成器(类似于此),如果源空闲时间过长,它会在生成水印时切换到处理时间。但是,我希望根据类变量重置为其原始默认值(例如我上面提供的链接的示例中的 Long.MIN_VALUE),检测到应用程序在更新或失败后重新上线。这样,我可以确保水印生成器不会将耗时五分钟的应用程序更新误认为是空闲五分钟的源。
此外,如果应用程序更新,Flink 是否会重新启动每个水印生成器操作符,即使水印生成器没有进行任何更改?
解决方案
只有由 Flink 显式管理的状态才会被持久化——所以是的,currentMaxTimestamp
从快照恢复时 in 的值会丢失。当前的水印也不包含在快照中。
我认为你可以做的——虽然我没有尝试过——是让你的水印生成器实现CheckpointedFunction
接口。然后,您可以实现这两种方法:
public void snapshotState(FunctionSnapshotContext context)
public void initializeState(FunctionInitializationContext context)
在initializeState
您有权访问的方法中context.isRestored()
,您可以知道是否从快照重新启动。
推荐阅读
- java - 将 elasticsearch-analysis-ik 放入插件后,我无法启动我的 elasticsearch
- unity3d - 在平台之间定义不同的字符串
- facebook - 如何查看 Messenger/facebook (https://scontent-arn2-1.xx.fbcdn.net) 的全尺寸图片?
- java - 从 PHP 中的自定义 AES-256-CBC 加密中解密 Java 中的数据
- python - Dash 收集我们的数据
- sql-server - 与其他网站共享 ibm notes 数据
- git - 如何将其他分支合并到我的分支中?
- php - 节点从类方法内部创建新对象
- php - 在 Woocommerce 中应用优惠券时显示罢工购物车项目小计
- java - 我们可以从元字典中删除记录吗