我正试图通过向getKey函数添加新的keyby值来更新我的一个生产任务中的keyby函数,例如keyby函数是
return Tuple2.of(
value.getTimestamp(),
value.isDefault()
现在是
return Tuple3.of(
value.getTimestamp(),
value.isDefault(),
value.isRedirect()
)
我正试图通过优雅地停止作业并使用保存点恢复来将我的新作业部署到uat服务器(以确保它在进行生产之前工作(,但我得到了以下错误:
java.lang.Exception:创建StreamOperatorStateContext时出现异常。由:org.apache.flink.util.FlinkException引起:无法从提供的1个还原选项中的任何一个还原WindowOperator_0dd2cd57af65cb839540855ced2e4169_(1/1(的键控状态后端
但是,如果我继续作业(按函数使用新键(但没有保存点,它就可以工作。
我从错误中得到的最好的猜测是,保存点包含的数据使用了旧的keyby函数,现在有了一个新函数,它们不兼容。
然而,这就引出了一个问题,如何在优雅地停止生产任务的同时更新生产任务上的keyby函数?
任何帮助都将不胜感激!
Flink中内置的模式迁移支持特别不允许更改键,因为新的键函数可能有不同的键组分配。
我相信在更新keyBy函数时进行有状态升级的唯一方法是使用状态处理器API重写保存点。
这里有一个使用API从检查点转储状态的简单示例。这可能会帮助你开始。