Flink有状态计算的状态容错

本文围绕Flink的状态容错展开。Flink支持有状态计算,为保证计算精准一次,单机时会周期性保存数据消费位置和状态形成快照;分布式环境下,通过在数据流中插入checkpoint barrier生成全局一致快照。此外,还介绍了检查点和savepoint在程序恢复中的应用。

状态容错 State Fault Tolerance

首先来说一说状态容错。Flink 支持有状态的计算,可以把数据流的结果一直维持在内存(或 disk)中,比如累加一个点击数,如果某一时刻计算程序挂掉了,如何保证下次重启的时候,重新恢复计算的数据可以从状态中恢复,并且每条数据只被计算了一次呢?

从数据的流入到计算流出,整个过程看成事务的话,就是如何保证整个过程具有原子性。

Flink 是怎么做的呢?只靠状态本身是远远不够的,状态只是保存了某个值,还需要保存一个计算的位置。

如果是单机的情况下,这个很好实现。

假设来自 Kafka 的数据流,经过应用逻辑的计算,生成状态保存到 state 中,这个过程是源源不断的,如图所示,为了保证state的容错性,程序会周期性的保存数据消费的位置和该时刻的状态,叫做快照,如果程序有异常需要重启的时候,就会从快照中恢复。这个过程保证了精准一次的计算,一条数据只会被计算一次。

分布式环境下没有这个简单,众所周知,任何问题到了分布式环境下,就变得复杂。

Flink 是如何做到状态分布式容错的呢?如何在不中断计算的情况下产生快照呢?

如图,Flink 会在数据流中插入 checkpoint barrier n ,他们会随着数据的流向流入下游的算子,首先记录

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

mylife512

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

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

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

打赏作者

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

抵扣说明:

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

余额充值