使用AllowNonRestoredState将TTL添加到现有状态并保留快照中的其余状态

问题描述

我在我的Flink应用程序之一的一个ProcessFunction中将TTL添加到ValueState。 Flink应用程序在此一个ProcessFunction和其他运算符中均具有多种其他状态。我了解到将TTL添加到ValueState使其不可向后兼容。但是,我想知道是否可以使用AllowNonRestoredState选项从快照中还原应用程序的其余状态,并使Flink跳过为添加TTL的一个ValueState还原状态吗?本质上,我希望对AllowednonRestoredState的功能有更多的了解。从文档中看来,它似乎仅在状态被完全放在一起的情况下才有效,而在状态仍然存在但已被修改的情况下则不行。

解决方法

AllowedNonRestoredState仅允许作业从状态快照(保存点或检查点)开始,该快照包含在开始的作业中无处可还原的状态。换句话说,某些状态被丢弃。

您可以不使用旧的ValueState,而可以引入新的ValueState(具有状态TTL),而不是尝试使Flink不为特定ValueState恢复状态。读取新的ValueState时,如果为空,则可以向前迁移旧值。

但是,我认为最好使用State Processor API(如我所建议的here)进行一次完整的一次性迁移。