这是我参与「第四届青训营 」笔记创作活动的第3天
1. 状态简介
流式计算分为有状态和无状态两种情况
1.1 无状态
- 无状态流式处理分别接收每条数据记录(黑条),并根据最新输入的数据生成输出数据(白条)
1.2 有状态
- 有状态流处理会维护状态,并根据最新输入的数据记录和当前的状态值生成输出数据
1.2.1 状态分类
- Flink提供了两种基本状态:Keyed State(键控状态)和Operator State(算子状态)
- 每种状态有两种存在形式:managed state(托管状态)和raw(原生状态)
| 状态类型 | 状态管理方式 | 状态的数据结构 |
| Keyed State | managed state | ValueState、ListState、ReducingState、AggregatingState、FoldingState、MapState |
| raw state | 字节数组:byte[] | |
| Operator State | managed state | ListState、BroadcastState |
| raw state | 字节数组:byte[] |
2. 状态后端
状态存储的三种方式:
-
MemoryStateBackend(基于内存存储,默认的状态存储方式)
-
将工作state保存在TaskManager的内存中,并将Checkpoint数据存储在JobManager的内存中
-
-
FsStateBackend(基于文件系统存储)
- 将工作state保存在TaskManager的内存中,并将Checkpoint数据存储在文件系统中
- 少量元数据会保存在JobManager内存中
- 状态放在外边会有序列化和反序列化的过程
-
RocksDBStateBackend(基于RocksDB数据库存储)
-
状态state先写入RocksDB,然后异步的将状态state写入文件系统
- RocksDB数据库保存在TaskManager中
- RocksDB是KV数据库,数据会先放在内存中,在一定条件下触发写到磁盘文件上
-
checkpoint时,整个RocksDB数据库的数据会快照一份,然后存到文件系统中
-
少量元数据存在JobManager的内存中
-