Apache Flink 进阶(一):Runtime 核心机制剖析(12)

图8.Restart-all 错误恢复策略示例 。 该策略会直接重启所有的 Task 。

图9.Restart-individual 错误恢复策略示例 。 该策略只适用于 Task之间不需要数据传输的作业 , 对于这种作业可以只重启出现错误的 Task 。

由于 Flink 的批作业没有 Checkpoint 机制 , 因此对于需要数据传输的作业 , 直接重启所有 Task 会导致作业从头计算 , 从而导致一定的性能问题 。 为了增强对 Batch 作业 , Flink 在1.9中引入了一种新的Region-Based的Failover策略 。 在一个 Flink 的 Batch 作业中 Task 之间存在两种数据传输方式 , 一种是 Pipeline 类型的方式 , 这种方式上下游 Task 之间直接通过网络传输数据 , 因此需要上下游同时运行;另外一种是 Blocking 类型的试 , 如上节所述 , 这种方式下 , 上游的 Task 会首先将数据进行缓存 , 因此上下游的 Task 可以单独执行 。 基于这两种类型的传输 , Flink 将 ExecutionGraph 中使用 Pipeline 方式传输数据的 Task 的子图叫做 Region , 从而将整个 ExecutionGraph 划分为多个子图 。 可以看出 , Region 内的 Task 必须同时重启 , 而不同 Region 的 Task 由于在 Region 边界存在 Blocking 的边 , 因此 , 可以单独重启下游 Region 中的 Task 。

推荐阅读