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。
版权声明: 本文为 InfoQ 作者【五分钟学大数据】的原创文章。
原文链接:【http://xie.infoq.cn/article/840fc4b8016c87b965918d986】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论