新版本Flink应用部署失败
Deployment of new version of Flink application failed
- 环境
- flink 1.7.1
- 卡夫卡 1.0.1
我在 Streaming 过程中使用 Flink 应用程序。
从kafka读取topic,下沉到kafka new Topic。
当我用新版本的代码更改应用程序并部署时,应用程序执行失败。
如果我在更改应用程序代码后部署相同的group.id,是否会与之前的状态检查点信息冲突?
是的,如果您尝试对 Flink 应用程序进行有状态升级,有几件事可能会导致它失败。
有状态运算符的 UID 用于查找每个运算符的状态。如果你没有设置 UID,那么如果作业的拓扑发生变化,状态恢复将失败,因为 Flink 将无法找到状态。有关详细信息,请参阅 the docs on Assigning Operator IDs。
如果您删除了有状态运算符,那么您应该 运行 新作业,同时指定 -allowNonRestoredState
。
如果您修改了数据类型,则在尝试反序列化检查点或保存点中的状态时作业可能会失败。 Flink 1.7 不支持自动模式演化或状态迁移。在较新版本的 Flink 中,如果您坚持使用 POJO 或 Avro,这会自动处理。否则你需要自定义序列化程序。
如果这不能帮助您找出问题所在,请分享显示特定异常的日志中的信息。
- 环境
- flink 1.7.1
- 卡夫卡 1.0.1
我在 Streaming 过程中使用 Flink 应用程序。 从kafka读取topic,下沉到kafka new Topic。
当我用新版本的代码更改应用程序并部署时,应用程序执行失败。
如果我在更改应用程序代码后部署相同的group.id,是否会与之前的状态检查点信息冲突?
是的,如果您尝试对 Flink 应用程序进行有状态升级,有几件事可能会导致它失败。
有状态运算符的 UID 用于查找每个运算符的状态。如果你没有设置 UID,那么如果作业的拓扑发生变化,状态恢复将失败,因为 Flink 将无法找到状态。有关详细信息,请参阅 the docs on Assigning Operator IDs。
如果您删除了有状态运算符,那么您应该 运行 新作业,同时指定 -allowNonRestoredState
。
如果您修改了数据类型,则在尝试反序列化检查点或保存点中的状态时作业可能会失败。 Flink 1.7 不支持自动模式演化或状态迁移。在较新版本的 Flink 中,如果您坚持使用 POJO 或 Avro,这会自动处理。否则你需要自定义序列化程序。
如果这不能帮助您找出问题所在,请分享显示特定异常的日志中的信息。