一文读懂之flink分布式快照checkpoint

Flink checkpoint
什么是Flink?
Apache Flink is a framework and distributed processing engine for stateful computations over unbounded and bounded data streams. Flink has been designed to run in all common cluster environments, perform computations at in-memory speed and at any scale.
今天主要讨论下"状态计算"和checkpoint

Flink流式计算特征
流式数据连续不断地到来,所以流处理程序也是持续运行的,并没有一个明确的结束退出时间。机器运行程序希望“永远运行”也是 不切实际的。因为各种硬件软件的原因,运行一段时间后程序可能异常退出、机器可能宕机, 如果我们只依赖一台机器来运行,就会使得任务的处理被迫中断。
解决方案:多台机器构建集群,以"分布式架构"来运行程序。这样不仅扩展了系 统的并行处理能力,而且可以解决单点故障的问题,从而大大提高系统的稳定性和可用性。
在分布式架构中,当某个节点出现故障,其他节点基本不受影响。这时只需要重启应用, 恢复之前某个时间点的状态继续处理就可以了。在实时流处理中“恢复之前某个时间点的状态”需要考虑到:
1、保证故障后能够重启继续运行
2、保证结果的正确性
3、故障恢复的速度
4、处理性能的影响
flink中有一套完整机制来保障这些,其中最重要的就是checkpoint

checkpoint
在流处理中,把之前的计算结果做个保存,这样重启之后就可以继续处理新数据、而不需要重新计算了。进一步地,我们知道在有状态的流处理中,任务继续处理新数据,并不需要“之前的计算结果”,而是需要任务“之前的状态”。所以我们 最终的选择,就是将之前某个时间点所有的状态保存下来,这份“存档”就是所谓的“检查点”(checkpoint)。
遇到故障重启的时候,我们可以从检查点中“读档”,恢复出之前的状态,这样就可以回到当时保存的一刻接着处理数据了。故障恢复之后继续处理的结果,应该与发生故障前完全一致,我们需要“检查”结果的正确性。所以,有时又会把 checkpoint 叫作“一致性检查点”。

状态管理
大多数流应用程序都是有状态的。许多算子会不断地读取和更新状态,例如在窗口中收集的数据、读取输入源的位置,或者像机器学习模型那样的用户定制化的算子状态。 Flink用同样的方式处理所有的状态,无论是内置的还是用户自定义的算子。本节我们将会讨论Flink支持的不同类型的状态,并解释“状态后端”是如何存储和维护状态的。
一般来说,由一个任务维护,并且用来计算某个结果的所有数据,都属于这个任务的状态。你可以认为状态就是一个本地变量,可以被任务的业务逻辑访问。如图显示了任务与其状态之间的交互。

任务会接收一些数据,处理数据时可以读取和更新状态数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吴成伟0122

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值