State概念
Flink state是一个非常重要的概念,但却有点抽象难以理解,State是个什么玩意?
继续要和流式数据扯上了。state状态指的就是进行每一个operator的中间结果存储。还不懂?举一个例子
- 无状态:假设有一个数组[a,b,c],对数据进行+1操作,结果为[a+1,b+1,c+1],b输出的结果受A的影响吗?显然是不受,也就是多次重放值是一样的
- 有状态的,其实就是数据之间是有关系的,算子作用在数据上,输出的结果和之前的状态有关。
State存储方式
在上文中说到,state状态需要存储,所以问题来了,存哪呢?如果把state当作数据,数据会存在哪呢?内存,磁盘,无非是这几种,state也不能除外
- 内存存储 MemoryStateBackend,一图胜千言,直接贴Flink社区文章图啦
- 文件系统上存储 FsStateBackend
-
key,vvalue内存存储 RocksDBStateBackend
State种类
分为Keyed State和Operator State
-
Keyed State
-
Operator State
-
区别
State管理
为什么需要管理state呢?直接一股脑放内存不香吗?no no no ,内存做不到呀,容量小,断电就无法恢复呀。
对于实时计算来说,特点是实时 7*24 h ,这数据量就够大了,而且得高可用呀,不然挂了怎么办?干等吗,于是就出现了状态管理机制