Flink科普系列之State(状态)

今天我们给大家介绍一下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 举一个简单地例子


Flink科普系列之State(状态)


Flink科普系列之State(状态)

如下图:


Flink科普系列之State(状态)


因为我们输入的单词是一个流的状态,我们需要把所有的单词进行一个累加,我们把一个单词出现的次数记作1,并且对其进行存储,然后遇到相同的单词再把次数进行累加,把这个求和值存储到对应单词的状态中即可!


想要继续深入学习flink吗 ,请继续关注咱们开课吧平台,后续会有更多文章发放出来


Flink科普系列之State(状态)



分享到:


相關文章: