Flink中的状态管理器
flink提供了三种状态管理器分别是:
- 基于内存的MemoryStateBackend
- 基于文件系统的FsStateBackend
- 基于RockDB的RocksDBStateBackend
1. MemoryStateBackend
MemoryStateBackend将状态数据全部存储于JVM堆内存中。MemoryStateBackend是Flink的默认状态管理器。状态数据包括用户使用的DataStream API创建的Key/Value State、窗口中缓存的状态数据和触发器等数据。基于内存的状态管理器速度快且高效,但具有内存容量有限等限制。一旦存储的状态数据过多就会导致系统内存溢出等问题。内存数据的易失性,如果机器出问题,整个主机内存中的状态数据就会丢失,进而无法恢复任务中的状态数据。因此MemoryStateBackend存在数据安全性问题,不建议用户在生产环境中使用。
MemoryStateBackend可以通过配置来使用异步快照(Asynchronous Snapshots)。通过异步快照可以避免阻塞管道(Blocking Pipelines),目前是默认开启,当然也可以通过MemoryStateBackend的构造函数配置进行关闭:
new MemoryStateBackend(MAX_MEM_STATE_SIZE, false);
其中MAX_MEM_STATE_SIZE指定每个状态值最大的内存使用大小。
MemoryStateBackend特点
- 聚合状态(Aggregate