flink状态管理之state backend
State Backend
默认情况下
- state会保存在TaskManager的内存中
- checkpoint会存储在JobManager的内存中
state的存储和checkpoint的取决于State Backend的配置。Flink提供了3种State Backend
- MemoryStateBackend : 基于内存存储
- FsStateBackend: 基于文件存储
- RocksDBStateBackend:基于数据库存储
设置方法:
- 通过==StreamExecutionEnvironment.setStateBackend(…)==来设置state存储的位置
- 开启checkpoint(注意,必须开启)
MemoryStateBackend
将数据持久化状态存储到内存中
- state数据保存在
java堆内存中
。 - 执行checkpoint的时候,会把state的快照数据保存到jobmanager的内存中。基于内存的state backend在生产环境下不建议使用。
代码设置
environment.setStateBackend(new MemoryStateBackend())
FsStateBackend
- State数据保存在taskmanager的内存中
- 执行checkpoint的时候,会把state的快照数据保存到配置的文件系统中。可以使用hdfs等分布式文件系统.
FsStateBackend 适合场景
状态数据特别的多,还有长时间的wi