写点什么

Flink 的 Checkpoint 持久化存储方案

发布于: 2021 年 04 月 23 日
Flink的Checkpoint持久化存储方案

目前,Checkpoint 持久化存储可以使用如下三种:

1. MemStateBackend


该持久化存储主要将快照数据保存到 JobManager 的内存中,仅适合作为测试以及快照的数据量非常小时使用,并不推荐用作大规模商业部署。

MemoryStateBackend 的局限性:

默认情况下,每个状态的大小限制为 5 MB。可以在 MemoryStateBackend 的构造函数中增加此值。

无论配置的最大状态大小如何,状态都不能大于 akka 帧的大小(请参阅配置)。

聚合状态必须适合 JobManager 内存。

建议 MemoryStateBackend 用于:

本地开发和调试

状态很少的作业,例如仅包含一次记录功能的作业(Map,FlatMap,Filter,...),kafka 的消费者需要很少的状态。

 

2. FsStateBackend


该持久化存储主要将快照数据保存到文件系统中,目前支持的文件系统主要是 HDFS 和本地文件。如果使用 HDFS,则初始化 FsStateBackend 时,需要传入以 “hdfs://”开头的路径(即: new FsStateBackend("hdfs:///hacluster/checkpoint")), 如果使用本地文件,则需要传入以“file://”开头的路径(即:new FsStateBackend("file:///Data"))。在分布式情况下,不推荐使用本地文件。如果某 个算子在节点 A 上失败,在节点 B 上恢复,使用本地文件时,在 B 上无法读取节点 A 上的数据,导致状态恢复失败。

建议 FsStateBackend:

具有大状态,长窗口,大键/ 值状态的作业。

所有高可用性设置。

 

3. RocksDBStateBackend


RocksDBStatBackend 介于本地文件和 HDFS 之间,平时使用 RocksDB 的功能,将数 据持久化到本地文件中,当制作快照时,将本地数据制作成快照,并持久化到 FsStateBackend 中(FsStateBackend 不必用户特别指明,只需在初始化时传入 HDFS 或本地路径即可,如


new RocksDBStateBackend("hdfs:///hacluster/checkpoint") 或

new RocksDBStateBackend("file:///Data"))。


如果用户使用自定义窗口(window),不推荐用户使用 RocksDBStateBackend。在自 定义窗口中,状态以 ListState 的形式保存在 StatBackend 中,如果一个 key 值中有多 个 value 值,则 RocksDB 读取该种 ListState 非常缓慢,影响性能。用户可以根据应用 的具体情况选择 FsStateBackend+HDFS 或 RocksStateBackend+HDFS。

 

发布于: 2021 年 04 月 23 日阅读数: 15
用户头像

专注于大数据技术研究 2020.11.10 加入

运营公众号:五分钟学大数据。大数据领域原创技术号,深入大数据技术

评论

发布
暂无评论
Flink的Checkpoint持久化存储方案