Flink知识学习(20)

网友投稿 563 2022-05-28

在启动 Checkpoint 机制时,状态会随着 Checkpoint 而持久化,以防止数据丢失,保障恢复时的一致性。状态内部的存储格式、状态在 Checkpoint 时如何持久化以及持久化在哪里,均取决于所选择的 State Backend,即状态后端。

默认State会保存在TaskManager的内存中,Checkpoint会存储在JobManager的内存中。State和Checkpoint的存储位置取决于State Backend的配置。Flink 内置了以下这些开箱即用的State Backend:

(1)MemoryStateBackend:基于内存;

(2)FsStateBackend:基于文件系统,可以是本地文件系统,也可以是HDFS文件系统;

(3)RocksDBStateBackend:基于RockDB作为存储介质。

如果不设置,默认使用 MemoryStateBackend。

MemoryStateBackend

new MemoryStateBackend(int maxStateSize, boolean asynchronousSnapshots)

Flink知识学习(20)

MemoryStateBackend,构造方法是设置最大的 StateSize,选择是否做异步快照。这种存储状态本身存储在 TaskManager 节点也就是执行节点内存中的,因为内存有容量限制,所以单个 State maxStateSize 默认 5 M,且需要注意 maxStateSize <= akka.framesize 默认 10 M。Checkpoint 存储在 JobManager 内存中,因此总大小不超过 JobManager 的内存。推荐使用的场景为:本地测试、几乎无状态的作业,比如 ETL、JobManager 不容易挂,或挂掉影响不大的情况。不推荐在生产场景使用。

FsStateBackend

FsStateBackend(URI checkpointDataUri  ,boolean  asynchronousSnapshots)

FsStateBackend ,构建方法是需要传一个文件路径和是否异步快照。State 依然在 TaskManager 内存中,但不会像 MemoryStateBackend 有 5 M 的设置上限,Checkpoint 存储在外部文件系统(本地或 HDFS),打破了总大小 Jobmanager 内存的限制。容量限制上,单 TaskManager 上 State 总量不超过它的内存,总大小不超过配置的文件系统容量。推荐使用的场景、常规使用状态的作业、例如分钟级窗口聚合或 join、需要开启 HA 的作业。

RocksDBStateBackend

RocksDBStateBackend(URI checkpointDataUri  ,boolean  enableIncremental-Checkpointing)

RocksDBStateBackend,RocksDB 是一个 key/value 的内存存储系统,和其他的 key/value 一样,先将状态放到内存中,如果内存快满时,则写入到磁盘中,但需要注意 RocksDB 不支持同步的 Checkpoint,构造方法中没有同步快照这个选项。不过 RocksDB 支持增量的 Checkpoint,也是目前唯一增量 Checkpoint 的 Backend,意味着每次用户不需要将所有状态都写进去,将增量的改变的状态写进去即可。它的 Checkpoint 存储在外部文件系统(本地或 HDFS),其容量限制只要单个 TaskManager 上 State 总量不超过它的内存 + 磁盘,单 Key 最大 2G,总大小不超过配置的文件系统容量即可。推荐使用的场景为:超大状态的作业,例如天级窗口聚合、需要开启 HA 的作业、最好是对状态读写性能要求不高的作业。

Flink知识学习告一段落。

Flink Hadoop

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:MySIAM与Innodb引擎
下一篇:鲲鹏云服务器移植mieDeep2
相关文章