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 <
[hidden email]>
Sent: Sunday, June 14, 2020 0:20
To:
[hidden email] <
[hidden email]>
Cc: user-zh <
[hidden email]>
Subject: 回复:Flink异常及重启容错处理
问题1: Flink希望开发者怎么处理程序的异常?
--异常数据当然需要用户自己try catch处理掉,否则即使从上个checkpoint恢复依然会使程序挂掉。
问题2:checkpoint是否可以转化为savepoint,使得在没来得及savepoint之前能够进行恢复?
―没太明白你的问题
问题3:如果我某条数据导致了异常,怎么样才忽略这条数据而不影响应用的状态和运行?
―本质是和问题1一样的,如果是flinksql任务,1.11会支持format.ignore-parse-errors
| |
Sun.Zhu
|
|
[hidden email]
|
签名由网易邮箱大师定制
在2020年06月9日 13:49,Z-Z<
[hidden email]> 写道:
Hi, 各位大佬们,请教几个问题:
背景:Flink程序在正常运行过程中由于某些原因抛出异常了(比如数据不正确、NullPointer等),设置了checkpoint,程序默认会无限重启,都没办法savepoint。
问题1: Flink希望开发者怎么处理程序的异常?
问题2:checkpoint是否可以转化为savepoint,使得在没来得及savepoint之前能够进行恢复?
问题3:如果我某条数据导致了异常,怎么样才忽略这条数据而不影响应用的状态和运行?