我正在我的一个Flink应用程序的一个ProcessFunction中将TTL添加到ValueState。Flink应用程序在这个ProcessFunction和其他操作符中都有多种其他类型的状态。我知道将TTL添加到ValueState会使其不向后兼容。然而,我想知道我是否可以使用AllowNonRestoredState选项从快照中恢复应用程序的其余状态,并让Flink跳过恢复我添加TTL的一个ValueState的状态?从本质上讲,我希望对AllowedNonRestoredState的作用有更多的了解。从文档来看,它似乎只适用于状态一起被删除的情况,而不适用于状态仍然存在但已被修改的情况。
AllowedNonRestoredState
只允许作业从状态快照(保存点或检查点(启动,该状态快照包含在正在启动的作业中无处恢复的状态。换句话说,一些州被撤销了。
与其试图让Flink不恢复特定ValueState的状态,您可以保留旧的ValueState,同时引入新的ValueState(具有状态TTL(。在读取新的ValueState时,如果它为null,则可以向前迁移旧值。
然而,我认为最好使用状态处理器API进行一次完整的一次性迁移(正如我在这里建议的那样(。