文章目录

  • (1)重启应用
  • (2)读取检查点,重置状态
  • (3)重放数据
  • (4)继续处理数据

在运行流处理程序时,Flink 会周期性地保存检查点。当发生故障时,就需要找到最近一次成功保存的检查点来恢复状态。

例如在word count 示例中,我们处理完三个数据后保存了一个检查点。之后继续运行,又正常处理了一个数据“flink”,在处理第五个数据“hello”时发生了故障,如图 10-3所示。

这里 Source 任务已经处理完毕,所以偏移量为 5;Map 任务也处理完成了。而 Sum 任务在处理中发生了故障,此时状态并未保存。

接下来就需要从检查点来恢复状态了。具体的步骤为:

(1)重启应用

遇到故障之后,第一步当然就是重启。我们将应用重新启动后,所有任务的状态会清空,如图 10-4 所示。

(2)读取检查点,重置状态

找到最近一次保存的检查点,从中读出每个算子任务状态的快照,分别填充到对应的状态中。这样,Flink 内部所有任务的状态,就恢复到了保存检查点的那一时刻,也就是刚好处理完第三个数据的时候,如图 10-5 所示。这里 key 为“flink”并没有数据到来,所以初始为 0。

(3)重放数据

从检查点恢复状态后还有一个问题:如果直接继续处理数据,那么保存检查点之后、到发生故障这段时间内的数据,也就是第 4、5 个数据(“flink”“hello”)就相当于丢掉了;这会造成计算结果的错误。

为了不丢数据,我们应该从保存检查点后开始重新读取数据,这可以通过 Source 任务向外部数据源重新提交偏移量(offset)来实现,如图 10-6 所示。

这样,整个系统的状态已经完全回退到了检查点保存完成的那一时刻。

(4)继续处理数据

接下来,我们就可以正常处理数据了。首先是重放第 4、5 个数据,然后继续读取后面的数据,如图 10-7 所示。

当处理到第 5 个数据时,就已经追上了发生故障时的系统状态。之后继续处理,就好像没有发生过故障一样;我们既没有丢掉数据也没有重复计算数据,这就保证了计算结果的正确性。在分布式系统中,这叫作实现了“精确一次”(exactly-once)的状态一致性保证。

这里我们也可以发现,想要正确地从检查点中读取并恢复状态,必须知道每个算子任务状态的类型和它们的先后顺序(拓扑结构);因此为了可以从之前的检查点中恢复状态,我们在改动程序、修复 bug 时要保证状态的拓扑顺序和类型不变。状态的拓扑结构在 JobManager 上可以由 JobGraph 分析得到,而检查点保存的定期触发也是由 JobManager 控制的;所以故障恢复的过程需要 JobManager 的参与。

flink故障恢复的流程(从检查点恢复状态)相关推荐

  1. Flink——Task退出流程与Failover机制

    Flink--Task退出流程与Failover机制 目录 Flink--Task退出流程与Failover机制 1 TaskExecutor端Task退出逻辑 2 JobMaster端failove ...

  2. Android解决程序切换后台被干掉,恢复状态问题

    Android解决程序切换后台被干掉,恢复状态问题 参考文章: (1)Android解决程序切换后台被干掉,恢复状态问题 (2)https://www.cnblogs.com/caiwan/p/And ...

  3. 开发自定义JSF组件(4) 保存状态与恢复状态

    2019独角兽企业重金招聘Python工程师标准>>> 完整的教材: 开发自定义JSF组件(1) HelloWorld 开发自定义JSF组件(2) 使用Render渲染器 开发自定义 ...

  4. HTML5 Canvas save 保存恢复状态

    保存恢复状态 在绘画的时候,经常会有这种情况,本来正在用绿色笔画,突然需要用红色笔画几笔,但画完了之后又要换成绿色笔.如果是在现实中作画,可以把笔蘸上不同的墨水,画了之后又蘸上之前的墨水,或者准备几只 ...

  5. Flink CheckPoint机制 学习 测试 使用FsStateBackend状态后端 将checkpoint恢复到中断处

    Flink CheckPoint机制 1.实验目的 目的 开启一个Flink程序,使用hdfs做状态后端,手动取消job后,再次恢复job测试,观察程序是否能恢复到检查点,继续读取并处理数据: 实验原 ...

  6. LevelDB 源码剖析(六)WAL模块:LOG 结构、读写流程、崩溃恢复

    文章目录 日志结构 读写流程 写入 读取 崩溃恢复 当向 LevelDB 写入数据时,只需要将数据写入内存中的 MemTable,而由于内存是易失性存储,因此 LevelDB 需要一个额外的持久化文件 ...

  7. F2FS源码分析-5.2 [数据恢复流程] 后滚恢复和Checkpoint的作用与实现

    F2FS源码分析系列文章 主目录 一.文件系统布局以及元数据结构 二.文件数据的存储以及读写 三.文件与目录的创建以及删除(未完成) 四.垃圾回收机制 五.数据恢复机制 数据恢复的原理以及方式 后滚恢 ...

  8. 1009-确认订单-订单流程梳理与订单状态

    一. 二.线程同步问题: 扣除商品库存与订单状态保存: synchronized 不推荐使用,集群下无用,性能低下. 锁数据库:不推荐,导致数据库性能低下. 分布式锁:zookeeper Redis ...

  9. LeetCode-题目详解(十一):回溯算法【递归回溯、迭代回溯】【DFS是一个劲往某一个方向搜索;回溯算法建立在DFS基础之上,在搜索过程中,达到结束/裁剪条件后,恢复状态,回溯上一层,再次搜索】

    这里写目录标题 一.概述 1.深度优先遍历(DFS) 和回溯算法区别 2. 何时使用回溯算法 3.回溯算法步骤 4.回溯问题的类型 二.LeetCode案例 39. 组合总和 40. 组合总和II 7 ...

最新文章

  1. UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)
  2. (资源整理)带你入门Spark
  3. 如何在SAP gateway系统配置路由到后台系统的OData服务路径
  4. 在asp.net core 下定义统一的入参和出参格式
  5. 图灵社区 : 阅读 : 谁说Vim不是IDE?(三)
  6. 64位程序怎么判断指针是否有效_AArch64应用程序级编程模型
  7. 永洪bi_案例分享!永洪BI助力知名三甲医院数字化转型升级
  8. 计算机英语翻译3000字,英语专四作文满分范文(二十八):计算机翻译
  9. 光环PMP 串讲冲刺 场景题目分析
  10. PT002(JspStudy)安装与端口解决问题
  11. 【计算机网络】3-20假定1km长的CSMA/CD网络的数据率为1Gbit/s。设信号在网络上的传播速率为200000 km/s。求能够使用此协议的最短帧长。
  12. XUGU:利空频传,建网站如何去赚钱?
  13. 【读书联动】认知觉醒:开启自我改变的原动力
  14. [联想 ThinkPad E450c 怎么进入BIOS]
  15. Python基于Django航空飞机票预定网站设计
  16. Unity接入苹果内购(IAP)
  17. 移动端二三事【五】:陀螺仪(重力感应器)实现手机位置、加速度感应以及常见应用。
  18. ppt给图片增加高斯模糊_PPT图片处理小技巧
  19. 纯文本抽出程序库DMC TEXT FILTER
  20. nutch核心代码分析——crawl.injector总结

热门文章

  1. keep-alive:
  2. 【强烈收藏】统计学中18种以上的数据分析方法汇总!
  3. 随心,随性,随缘。注定让一生改变的,只在百年后,那一朵花开的时间…
  4. 学android开发 不得不去的好地方
  5. Python笔试练习题
  6. gmail+mtalk配合打免费网络电话。
  7. PXE高效网络装机与Kickstart无人值守
  8. 相关系数-excel-CORREL()
  9. Unity内实现MMD
  10. 【JKD源码】String 三兄弟