今天我们给大家介绍一下flink中的state,什么是state呢?大家可以理解为我们在处理数据的时候,每一个数据我们都会相应的为其准备一个空间存储他的变化过程
1 状态的简介
在flink中,我们是把所有的数据都可以看做是有状态的,比如我们在一个数据流中,我们要对一个数据流进行单词计数统计,但是在这个过程中,如果程序突然中断或者一些其他原因导致了我们的程序出现了fail,那这个时候我们就看可以用状态来解决这种问题!使用状态配合Checkpoint来解决就可以完美的规避掉这种生产事故的产生了!
2 State的分类
State分为两类分别是:Keyed State和Operator State。在这之上,我们的状态又分为托管状态和原始状态,在我们实际工作中,大多数都是采用的托管状态,
2.1 Keyed State
Keyed State的意思就是我们的数据都是按照key进行划分的,也就是相同的key状态都会保存在一起,也就是说 苹果都跟苹果放在一起,香蕉都和香蕉放在一起,方便管理和操作!
其中我们一共有以下几种储存数据的方式如下:
ValueState:单值状态并且与key绑定,可以通过update进行更新,和value进行取值
ListState:可以把这个理解为我们把数据的状态都存放在一个list上,然后我们就可以使用list的方法啦,很是方便!
ReducingState:这种状态我们可以简单的理解我们要对状态进行合并计算,如果是这种条件下我们就使用这种状态!
MapState:顾名思义,这种状态就是把状态放到了map中,形成了k-v键值对,同样类似于ListState我们就可以使用map中的一些方法了!
2.2 Operator State
这种状态就是跟key无关,此时就需要我们自己去设定了,他的数据结构和keyed state类似,只不过区别在于Operator State是与key无关的
3 举一个简单地例子
大家可以从这幅图中看到,我们状态使用了一个Tuple2<String,Double>,我们对输入的单词要进行一个统计计算,我们就把每个单词出现的次数记作1
如下图:
因为我们输入的单词是一个流的状态,我们需要把所有的单词进行一个累加,我们把一个单词出现的次数记作1,并且对其进行存储,然后遇到相同的单词再把次数进行累加,把这个求和值存储到对应单词的状态中即可!
来源:CSDN
作者:Big_data123
链接:https://blog.csdn.net/Big_data123/article/details/104657320