一.引言
入门Demo讲到了Flink的一个处理特性就是通过时间窗口对一段时间的数据进行处理,这次有状态算子则是另一种基于时间的处理,有状态算子根据自身状态的过期时间,可以根据一定时间内的状态改变做出相对应的变化,相比于传统流式处理,状态的引入丰富了事件的处理方式。本章同样采用之前的温度传感器作为数据源,与之前的区别是统计指标由一段时间内一个传感器的平均温度变为了检测一个传感器一段时间内是否发生较大变化,如果超过预期阈值则发生报警,否则无事发生。
二.依赖支持与辅助类
依赖支持与辅助类同上一篇博文相同,需要的话可以直接去这里粘贴!
三.有状态算子和应用
1.简介
有状态算子和应用是Flink的一大特性,其作用于 KeyedStream,一般通过 keyBy() 方法指定需要聚合的 key 即可将原始的 DataStream 转换为 KeyedStream。对于每一个键值key,Flink都会维护一个实例状态,函数的键值分区状态会分布在函数所在的算子的所有并行任务上,这意味着每个函数的并行实例都会负责一部分键值域并维护相应的状态实例。KeyedStream 会根据指定键值进行分区并记住键值的定义,作用在 KeyedStream 上的算子可以访问他的键值定义的上下文信息。
2.状态的初始化-ValueState
相关键值分区状态的声明需要在 RuntimeContext中定义,ValueState[T] 用于保存类型为T的单个值,常用的方法有通过 .value() 获取该状态对应的实例T,.update(Value: T)来更新当前状态的实例以及 .cle
版权声明:本文为BIT_666原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。