开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

当任务出错,出错恢复策略如何解决问题?

当任务出错,出错恢复策略如何解决问题?

展开
收起
詹姆斯邦德00 2021-11-17 17:12:56 1367 0
1 条回答
写回答
取消 提交回答
  • 目前 Flink 默认的 FailoverStrategy 是 RestartPipelinedRegionFailoverStrategy。采用了这个策略后,如果一个 Task 失败了就会重启它所在的 region。这其实跟 Pipelined 数据交换有关系。在 Pipelined 数据交换的节点之间,如果任意一个节点失败了,其相关联的其它节点也会跟着失败。这是为了防止出现数据的不一致。因此为了避免单个 Task 导致多次 Failover,一般的操作是在收到第一个Task failed 时,就把其他的一起 cancel 掉,再一起重启。

    RestartPipelinedRegion 策略除了重启失败任务所在的 Region 外,还会重启它的下游Region 。 原因是任务的产出很多时候是非确定性的,比如说一个record,分发到下游的第一个并发,重跑一次;分发到下游的第二个并发时,一旦这两个下游在不同 region 中,就可能会导致 record 丢失,甚至产生不一样的数据。为了避免这种情况,采用PipelinedRegionFailoverStrategy 会重启失败任务所在的Region 以及它的所有的下游 Region。

    还有一个 RestartAllFailoverStrategy 策略,它会在任意 Task fail 的时候,重启作业中的所有任务。一般情况,这个策略并不被经常用到,但是在一些特殊情况下,比如当任务失败,用户不希望局部运行而是希望所有任务都结束并整体进行恢复,可以用这个策略。

    资料来源:《Apache Flink 必知必会》,下载链接:https://developer.aliyun.com/topic/download?id=1189 

    2021-11-17 19:17:17
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关电子书

更多
面向失败设计 立即下载
微信SQLite数据库损坏恢复实践 立即下载
低代码开发师(初级)实战教程 立即下载

相关实验场景

更多