Flink的State浅尝辄止

一、什么是state
在flink官方的定义中,将其定义为是一个能够在数据流上进行状态计算的框架。结合实际使用,state泛指在flink中有状态函数或运算符在对各个数据流的处理过程中存储的数据。注意:状态数据可以修改、查询,根据自己的业务场景,保存历史数据或者中间结果到状态(state)中。

state分为Keyed state和Operate state。Keyed state通常和key相关,仅可使用在KeyedStream的方法和算子中。Keyed state的初始化是在open函数中,读写操作一般定义在用户实现的算子函数中,例如RichMapFunction的map中。在checkpoint时,由flink自行备份当前state到checkpoint快照中,无需用户手动管理快照触发和生成的细节。而Operate state(non-keyed state),每个Operate state和一个并发实例进行绑定。Operate state需要用户实现CheckpointedFunction或ListCheckpointed,通过手动覆写接口中的函数来定义state的初始化和快照生成逻辑。

二、如何理解state
flink中的state分为有状态计算和无状态计算。在实际开发中,如何理解这两种计算的差异呢?下面我们通过其定义和举例的方式分别对其进行说明。

flink中的有状态计算和无状态计算:
有状态计算:指新进入flink的数据流需要和历史的数据流进行相关的操作后,才能计算出正确的结果。
无状态计算:数据进入flink后,只需要对当前的数据流进行处理就能得到想要的正确的结果。
举例说明:
有状态计算,统计某一个单词出现的次数,随着输入流的不断输入,当某一个单词出现后,计数器加1,再次出现时,计数器加1后变为2,这类操作属于有状态计算操作,对新输入的数据流的操作总是会用到历史的数据流。
无状态计算,当输入流中yn的值是1时,对应输出“是”,yn的值是0或其他值时,对应输出“否”。这种对输入的数据流进行处理了就能得到相要的正确结果。一般情况下,无状态计算是一个幂等操作。

三、state应用场景
1、缓存场景
上文提到的计数器,每次都是基于已有的数在其上加1,这里对计数器里数据的存储即是其应用场景之一。再比如,多表关联时,由于每一表的数据流到达算子的时间有前后,可以把先到的数据流存储到state中,待其他的数据流到达后再把state的数据取出一起计算。

2、快照
流式任务上下线或宕机时,把停机时的数据流信息存储到state,便于集群恢复时从state获取停机时的数据流信息,便于精确恢复数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值