文章目录
在Flink中提供了StateBackend(状态后端)来存储和管理Checkpoint过程中的状态数据。StateBackend分为三种。
1. MemoryStateBackend
1.1 概念
1.2 特点及使用场景
MemoryStateBackend存储有如下特点:
- 聚合类的算子状态数据会存储在jobManager内存中,因此对聚合类算子较多的应用会对jobManager的内存有一定的压力,进而对整个集群会造成较大的负担。
- 虽然在创建MemoryStateBackend的时候可以指定内存大小,但是状态数据的传输大小也会受限于Akka框架通信的大小限制。
- 最后就是JVM的内存容量受限于主机的内存大小,因此对于较大的状态数据不适合使用MemoryStateBackend。
2. FsStateBackend
2.1 概念
FsStateBackend和MemoryStateBackend不同,它是基于文件系统的一种状态管理器,这里的文件系统可以是本地文件系统,也可以是hdfs分布式文件系统。
2.2 特点及应用场景
- 可以指定是本地文件系统或hdfs分布式文件系统存储状态数据
- 默认使用异步的方式将状态数据同步到文件系统中,异步的方式可以尽量避免在checkpoint中影响流式的计算任务。
- 相比MemoryStateBackend,FsStateBackend可以适用于状态数据量较大的场景下。
- 状态数据如果使用hdfs存储可以有一定的容错率,由于副本的存在,数据更安全。
应用场景:
- 状态数据量较大的时候
- 应用中有时间范围非常长的窗口计算时