【Flink流式计算框架】flink的状态(state)是怎么理解的

002Flink


Apache Flink® — Stateful Computations over Data Streams
Streams:
对于流计算,大家应该都知道,就是处理源源不断产生的数据,虽然有批次,但是是实时的,延迟性很低的,不是那种聚合了很长一段时间才处理的方式。
Stateful:
对于状态,那怎么理解呢?开始,我认为就是在操作过程,有这个操作步骤的,操作方法,操作数据的标记,但是你不能这样说那。这样讲会比较浅,虽然你也知道很多state,所以要讲的有理有据有场景。

State:一般指一个具体的task/operator的状态。
     Keyed State(keyBy):托管状态、原始状态 工作中用的较多
     Operator State(unKeyBy):托管状态、原始状态 工作中用的较少
     原始状态工作中基本用不到
Keyed State六种托管状态
     Flatmap正常情况下实现FlatMapFunction然后重写flatMap<>方法,为了更丰富的功能另一种方式是继承RichFlatMapFunction<IN,OUT> ,多了一个初始化方法open只会运行一次。用Rich目的就是用来注册状态
     ValueState保存的是对应的一个key的一个状态值
在这里插入图片描述

     在flatMap中对上面的countAndSum进行业务逻辑操作
     SparkStreaming中updateStateByKey、mapWithState管理状态有限

     ListState保存的是对应的一个key出现的所有的元素

     MapState:Map数据结构,key相同会覆盖value的值。将map转换成list进行操作Lists.newArrayList(mapState.value());

     利用flatMap/map+state自定义出功能丰富的算子

State backend状态备份
MemoryStateBackend 默认的state 的类型
     默认情况下,状态信息存储在TaskManager的堆内存中,checkpoint时候将状态保存到JobManager的堆内存中
FsStateBackend(使用的这种)
     状态信息存储在TaskManager的堆内存中,checkpoint时候将状态保存到指定文件中(hdfs等文件系统中)
RocksDBStateBackend
     分布式数据库,状态信息存储在RocksDB数据库(key-value的数据存储服务),最终保存在本地文件中,checkpoint时候将状态保存到指定文件中(hdfs等文件系统中)。需要引入jar包
在这里插入图片描述
如何设置状态类型
代码中设置
配置文件flink-conf.yaml
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值