【问题标题】:Updating flink keyby function in production在生产中更新 flink keyby 功能
【发布时间】:2021-06-16 19:38:34
【问题描述】:

我正在尝试通过向 getKey 函数添加一个新的 keyby 值来更新我的一个生产 flink 作业中的 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 函数的数据,现在有一个新的,它们不兼容。

然而这引出了一个问题,如何在优雅地停止作业的同时更新生产 flink 作业的 keyby 函数?

任何帮助将不胜感激!

【问题讨论】:

    标签: java deployment streaming apache-flink flink-streaming


    【解决方案1】:

    Flink 中内置的架构迁移支持明确禁止更改键,因为新的键功能可能具有不同的键组分配。

    我认为在更新 keyBy 函数时进行有状态升级的唯一方法是使用 State Processor API 重写保存点。

    有一个使用该 API 从检查点 here 转储状态的简单示例。这可能会帮助您入门。

    【讨论】:

    • 我想我能够做到这一点。但是,由于现在不存在原始的 keyby 功能,因此必须以“允许非恢复状态”运行作业是否正常?
    猜你喜欢
    • 2022-12-02
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多