Hi 我想你的问题是数据源中存在之前代码中没有很好处理的corner case,导致在处理某一条“脏数据”时,作业进入FAILED状态。此时即使从之前的checkpoint恢复,由于作业代码逻辑未变,之前的corner case依然无法处理,作业只能无限进去失败状态。
这种场景可以一开始时候将checkpoint的保留策略设置成RETAIN_ON_CANCELLATION [1],这样cancel作业之后,更改业务代码逻辑,从而可以处理之前的问题,再降作业上线从之前的checkpoint恢复 [2],这样做的话,数据是不会丢失的。 [1] https://ci.apache.org/projects/flink/flink-docs-stable/ops/state/checkpoints.html#retained-checkpoints [2] https://ci.apache.org/projects/flink/flink-docs-stable/ops/state/checkpoints.html#resuming-from-a-retained-checkpoint 祝好 唐云 ________________________________ From: Sun.Zhu <17626017...@163.com> Sent: Sunday, June 14, 2020 0:20 To: user-zh@flink.apache.org <user-zh@flink.apache.org> Cc: user-zh <user-zh@flink.apache.org> Subject: 回复:Flink异常及重启容错处理 问题1: Flink希望开发者怎么处理程序的异常? --异常数据当然需要用户自己try catch处理掉,否则即使从上个checkpoint恢复依然会使程序挂掉。 问题2:checkpoint是否可以转化为savepoint,使得在没来得及savepoint之前能够进行恢复? ―没太明白你的问题 问题3:如果我某条数据导致了异常,怎么样才忽略这条数据而不影响应用的状态和运行? ―本质是和问题1一样的,如果是flinksql任务,1.11会支持format.ignore-parse-errors | | Sun.Zhu | | 17626017...@163.com | 签名由网易邮箱大师定制 在2020年06月9日 13:49,Z-Z<zz9876543...@qq.com> 写道: Hi, 各位大佬们,请教几个问题: 背景:Flink程序在正常运行过程中由于某些原因抛出异常了(比如数据不正确、NullPointer等),设置了checkpoint,程序默认会无限重启,都没办法savepoint。 问题1: Flink希望开发者怎么处理程序的异常? 问题2:checkpoint是否可以转化为savepoint,使得在没来得及savepoint之前能够进行恢复? 问题3:如果我某条数据导致了异常,怎么样才忽略这条数据而不影响应用的状态和运行?