大数据程序员Spark_Flink_Hadoop

Flink增量快照

2018-09-21  本文已影响7人  薛定谔的猫Plus

1 概述

Apache Flink是可以进行有状态的流处理,然而,在流处理中什么是状态呢?状态是有过去事件的在内存中的一些操作需要存储,这些存储的信息会影响未来事件的处理。
状态是基础,可以在流出中处理很多比较复杂的场景,如下:

然而,有状态的流处理只有在状态可以进行容错的时候才可用于生产环境,容错意味着即使出现软件或者硬件故障,计算结果也要保证准确,没有出现数据丢失或者重复计算等情况。

在flink中通过chekpointing来实现容错,checkpoint是一个全局的,提供异步快照机制,定期的对当前应用进行快照并存储到可靠存储上,当出现异常时,flink重启应用,并使用最近完成的checkpoint作为起点。一些用户实际可能保存的状态很大,占用上GB空间,这种情况下checkpoint的创建会非常慢,而且执行时占用的资源也比较多,从而提出incremental checkpointing,即增量方式。
在增量方式之前,每次都是进行全量的checkpoint,但是每次快照都是基于上次的更新,不会很大,所以使用增量方式只要保持上一次与当前的差距即可。

2 示例

当前,可以使用RocksDB来作为增量checkpoint的存储,并在其中不是持续增大,可以进行定期合并清楚历史状态。


increment-checkpoint-example.png

该例子中,子任务的操作是一个keyed-state,一个checkpoint文件保存周期是可配置的,本例中是2,配置方式state.checkpoints.num-retained,上面展示了每次checkpoint时RocksDB示例中存储的状态以及文件引用关系等。

上一篇下一篇

猜你喜欢

热点阅读