【Flink】(八)容错机制

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 【Flink】(八)容错机制

文章目录


一、一致性检查点(Checkpoints)

二、从检查点恢复状态

三、检查点的实现算法

四、Flink 检查点算法

4.1 检查点分界线(Checkpoint Barrier)

五、保存点(Savepoints)

六、检查点的配置


一、一致性检查点(Checkpoints)


Flink 具体如何保证 exactly-once 呢? 它使用一种被称为"检查点"(checkpoint)的特性,在出现故障时将系统重置回正确状态。


假设你和两位朋友正在数项链上有多少颗珠子。你捏住珠子,边数边拨,每拨过一颗珠子就给总数加一。你的朋友也这样数他们手中的珠子。当你分神忘记数到哪里时,怎么办呢? 如果项链上有很多珠子,你显然不想从头再数一遍,尤其是当三人的速度不一样却又试图合作的时候,更是如此(比如想记录前一分钟三人一共数了多少颗珠子,回想一下一分钟滚动窗口)。




于是,你想了一个更好的办法: 在项链上每隔一段就松松地系上一根有色皮筋,将珠子分隔开; 当珠子被拨动的时候,皮筋也可以被拨动; 然后,你安排一个助手,让他在你和朋友拨到皮筋时记录总数。用这种方法,当有人数错时,就不必从头开始数。相反,你向其他人发出错误警示,然后你们都从上一根皮筋处开始重数,助手则会告诉每个人重数时的起始数值,例如在粉色皮筋处的数值是多少。


Flink 检查点的作用就类似于皮筋标记。数珠子这个类比的关键点是: 对于指定的皮筋而言,珠子的相对位置是确定的; 这让皮筋成为重新计数的参考点。总状态(珠子的总数)在每颗珠子被拨动之后更新一次,助手则会保存与每根皮筋对应的检查点状态,如当遇到粉色皮筋时一共数了多少珠子,当遇到橙色皮筋时又是多少。当问题出现时,这种方法使得重新计数变得简单。



Flink 故障恢复机制的核心,就是应用状态的一致性检查点


有状态流应用的一致检查点,其实就是所有任务的状态,在某个时间点一份拷贝(一份快照),这个时间点,应该是所有任务都恰好处理完一个相同的输入数据的时候。


二、从检查点恢复状态



在执行流应用程序期间,Flink会定期保存状态的一致检查点


如果发生故障,Flink将会使用最近的检查点来一致恢复应用程序的状态,并重新启动处理流程



遇到故障后,第一步就是重新启动



第二步是从 checkpoint 中读取状态,将状态重置


从检查点重新启动应用程序后,其内部状态与检查点完成时的状态完全相同



第三步:开始消费并处理检查点到发生故障之间的所有数据


这种检查点的保存和恢复机制可以为应用程序提供“精确一次”(exactly-once)的一致性,因为所有的算子都会保存检查点并恢复其所有的状态,这样一来所有的输入流就都会被重置到检查点完成时的位置


三、检查点的实现算法


一种简单的想法


暂停应用,保存状态到检查点,再重新恢复应用


Flink 的改进实现


基于Chandy-Lamport 算法的分布式快照

将检查点的保存和数据处理分离开,不暂停整个应用


四、Flink 检查点算法


4.1 检查点分界线(Checkpoint Barrier)


Flink 的检查点算法用到了一种称为分界线(barrier)的特殊形式,用来吧一条流上数据按照不同的检查点分开


分界线之前来的数据导致的状态更改,都会被包含在当前分界线所属的检查点中;而基于分界线之后的数据导致的所有更改,就会被包含在之后的检查点中



现在是一个有两个输入流的应用程序,用并行的两个Source任务来读取



JobManager 会向每个 source 任务发送一条带有新检查点ID的消息,通过这种方式来启动检查点



数据源将它们的状态写入检查点,并发出一个检查点barrier


状态后端在状态存入检查点之后,会返回通知给source任务,source任务就会向JobManager确认检查点完成



分界线对齐:barrier向下游传递,sum任务会等待所有输入分区的barrier到达


对于barrier已经到达的分区,继续到达的数据会被缓存


而barrier尚未到达的分区,数据会被正常处理



当收到所有输入分区的barrier时,任务就将其状态保存到状态后端的检查点中,然后将barrier继续向下游转发



向下游转发检查点barrier后,任务继续正常的处理数据



Sink 任务向 JobManager 确认状态保存到checkpoint 完毕


当所有任务都确认已成功将状态保存到检查点时,检查点就真正完成了


五、保存点(Savepoints)


Flink 还提供了可以自定义的镜像保存功能,就是保存点(savepoints)


原则上,创建保存点使用的算法与检查点完全相同,因此保存点可以认为就是具有一些额外元数据的检查点


Flink 不会自动创建保存点,因此用户(或者外部调度程序)必须明确地触发创建操作


保存点是一个强大的功能。除了故障恢复外,保存点可以用于:有计划的手动备份,更新应用程序,版本迁移,暂停和重启应用等等。


六、检查点的配置




相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
目录
相关文章
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
671 3
|
消息中间件 存储 NoSQL
Flink(十二)【容错机制】(4)
Flink(十二)【容错机制】
|
存储 数据处理 Apache
超越传统数据库:揭秘Flink状态机制,让你的数据处理效率飞升!
【8月更文挑战第26天】Apache Flink 在流处理领域以其高效实时的数据处理能力脱颖而出,其核心特色之一便是状态管理机制。不同于传统数据库依靠持久化存储及 ACID 事务确保数据一致性和可靠性,Flink 利用内存中的状态管理和分布式数据流模型实现了低延迟处理。Flink 的状态分为键控状态与非键控状态,前者依据数据键值进行状态维护,适用于键值对数据处理;后者与算子实例关联,用于所有输入数据共享的状态场景。通过 checkpointing 机制,Flink 在保障状态一致性的同时,提供了更适合流处理场景的轻量级解决方案。
505 0
|
调度 流计算
Flink 新一代流计算和容错问题之Flink 中的数据可以分为什么类型
Flink 新一代流计算和容错问题之Flink 中的数据可以分为什么类型
173 3
|
Cloud Native 安全 调度
Flink 新一代流计算和容错问题之Flink 通过云原生技术改进容错设计要如何操作
Flink 新一代流计算和容错问题之Flink 通过云原生技术改进容错设计要如何操作
206 2
|
运维 Cloud Native 数据库
Flink 新一代流计算和容错问题之将 Flink 的容错与云原生的弹性扩缩容相结合要怎么操作
Flink 新一代流计算和容错问题之将 Flink 的容错与云原生的弹性扩缩容相结合要怎么操作
204 1
|
存储 流计算
Flink 新一代流计算和容错问题之Flink 通过 Key Group 管理状态是怎么操作的
Flink 新一代流计算和容错问题之Flink 通过 Key Group 管理状态是怎么操作的
326 1
|
存储 调度 流计算
Flink 新一代流计算和容错问题之如何实现 Generalized Log-Based Incremental Checkpoint
Flink 新一代流计算和容错问题之如何实现 Generalized Log-Based Incremental Checkpoint
275 1
|
存储 缓存 流计算
Flink 新一代流计算和容错问题之在有状态的算子中,状态更新是怎么记录的
Flink 新一代流计算和容错问题之在有状态的算子中,状态更新是怎么记录的
204 1
|
缓存 流计算
Flink 新一代流计算和容错问题之 Flink 作业的 local buffer pool 的 size 要如何估算
Flink 新一代流计算和容错问题之 Flink 作业的 local buffer pool 的 size 要如何估算
300 1

热门文章

最新文章