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

基于这一思路如果某个 Region 中的某个 Task 执行出现错误 , 可以分两种情况进行考虑 。 如图 8 所示 , 如果是由于 Task 本身的问题发生错误 , 那么可以只重启该 Task 所属的 Region 中的 Task , 这些 Task 重启之后 , 可以直接拉取上游 Region 缓存的输出结果继续进行计算 。

另一方面 , 如图如果错误是由于读取上游结果出现问题 , 如网络连接中断、缓存上游输出数据的 TaskExecutor 异常退出等 , 那么还需要重启上游 Region 来重新产生相应的数据 。 在这种情况下 , 如果上游 Region 输出的数据分发方式不是确定性的(如 KeyBy、Broadcast 是确定性的分发方式 , 而 Rebalance、Random 则不是 , 因为每次执行会产生不同的分发结果) , 为保证结果正确性 , 还需要同时重启上游 Region 所有的下游 Region 。

图10.Region-based 错误恢复策略示例一 。 如果是由于下游任务本身导致的错误 , 可以只重启下游对应的 Region 。

推荐阅读