MemoryStateBackend
env.setStateBackend(new MemoryStateBackend("file://" + baseCheckpointPath,null).configure(conf,classLoader))
- state状态数据存储在taskmanager内存
- checkpoint数据存储在jobmanager内存
- 单state大小默认是5M,最高不能超过10M
- 总大小不能超过jobmanager的大小
- 默认的存储方式
FsStateBackend
env.setStateBackend(new FsStateBackend(tmpPath)) tmpPath是指的是本地文件路径或这是hdfs路径
- state状态数据存储在taskmanager内存
- checkpoint存储在外部的文件系统
- taskmanager上的state存储不能超过TM内存大小
- 总数据大小不能超过文件系统的总量
RocksDBStateBackend
env.setStateBackend(new RocksDBStateBackend("file://"+baseCheckpointPath).configure(conf,classLoader))
- state存储在kv数据库中(实际使用内存+磁盘)
- checkpoint存储在外部文件系统
- 单state 存储上限是内存加磁盘
- checkpoint不能超过文件系统大小
- 单key总大小不超过2G
statebackend的配置
对应全局任务的配置 flink-conf.yaml中设定
//可选参数 jobmanager filesystem rocksdb
state.backend:filesystem
state.checkpoint.dir: hdfs://namenode:8020/flink/checkpoints
job中指定
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment()
env.setStateBackend(new FsStateBackend("hdfs://namenode:40010/flink/checkpoints"))
rocksdb statebackend适合可以增量的保存
RocksDBStateBackend
RocksdbstateBackend.