Flink从入门到上天系列第十九篇:Flink当中的容错机制
一检查点的概念在流处理中我们可以用存档读档的思路就是将之前某个时间点所有的状态保存下来这份 “存档” 就是我们所谓的“检查点”checkpoint。遇到故障重启的时候我们可以从检查点中 “读档”恢复出之前的状态这样就可以回到当时保存的一刻接着处理数据了。这里所谓的 “检查”其实是针对故障恢复的结果而言的故障恢复之后继续处理的结果应该与发生故障前完全一致我们需要 “检查” 结果的正确性。所以有时又会把 checkpoint 叫做 “一致性检查点”。二检查点的保存1周期性的触发保存“随时存档”确实恢复起来方便可是需要我们不停地做存档操作。如果每处理一条数据就进行检查点的保存当大量数据同时到来时就会耗费很多资源来频繁做检查点数据处理的速度就会受到影响。所以在Flink中检查点的保存是周期性触发的间隔时间可以进行设置。2保存的时间点我们应该在所有任务算子都恰好处理完一个相同的输入数据的时候将它们的状态保存下来。这样做可以实现一个数据被所有任务算子完整地处理完状态得到了保存。一条数据从头走到尾了。是怎么确定的Barrair分界线。一种特殊的消息JobManager发出的从左到右会让一条正常消息完整执行完毕路过哪个子任务哪个子任务就做检查点。这样就可以保障分界线之前的数据完整的完成计算。如果出现故障我们恢复到之前保存的状态故障时正在处理的所有数据都需要重新处理我们只需要让源source任务向数据源重新提交偏移量、请求重放数据就可以了。当然这需要源任务可以把偏移量作为算子状态保存下来而且外部数据源能够重置偏移量kafka就是满足这些要求的一个最好的例子。3保存的具体流程检查点的保存最关键的就是要等所有任务将“同一个数据”处理完毕。下面我们通过一个具体的例子来详细描述一下检查点具体的保存过程。回忆一下我们最初实现的统计词频的程序——word count。这里为了方便我们直接从数据源读入已经分开的一个个单词例如这里输入的是“hello”“world”“hello”“flink”“hello”“world”“hello”“flink”…我们所需要的就是每个任务都处理完“hello”之后保存自己的状态。这里边体现的是状态。紫色的是状态。上边的一个方格代表一个槽。一个子任务。检查点就是对状态的一个备份是状态的一个副本是状态的一个快照。三检查点的保存和恢复流程1定期保存检查点当我们需要保存检查点时就是在所有任务处理完同一条数据后对状态做个快照保存下来。例如我们输入数据为hello, world, hello, flink, hello, world, hello, flink……我们所需要的就是每个任务都处理完 hello 之后保存自己的状态。2模拟处理过程发生故障比方说某子任务突然宕机。3通过最近检查点进行恢复首先需要重启计算机重新启动任务。此时任务中都是空的 然后读取检查点重置各个算子状态。4重置偏移量从检查点恢复状态后还有一个问题如果直接继续处理数据那么保存检查点之后、到发生故障这段时间内的数据也就是第 4、5 个数据flink hello就相当于丢掉了这会造成计算结果的错误。为了不丢数据我们应该从保存检查点后开始重新读取数据这可以通过 Source 任务向外部数据源重新提交偏移量offset来实现。做完了这些整个系统的状态已经完全退回到了检查点保存的那一刻。5继续处理数据即可继续处理数据即可首先是重放数据然后处理新数据即可。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2424208.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!