Flink的DataStream状态管理
目录
键控数据流(Keyed DataStream)
键控状态(Keyed State)
值状态(ValueState)
列表状态(ListState)
归约状态(ReducingState)
聚合状态(AggregatingState)
映射状态(MapState)
状态生存时间(TTL)
算子状态(Operator State)
广播状态(Broadcast State)
实现CheckpointedFunction 使用算子状态
对于DataStream来说,状态主要分为如下两类:
(1)键控状态(keyed state)
(2)算子状态(Operator State)
说键控状态之前,不得不提键控数据流。
键控数据流(Keyed DataStream)
如果希望使用键控状态(keyed state),首先需要在数据流上指定一个键,该键用于对状态(以及流本身中的记录)进行分区。您可以在数据流上使用Java/Scala API中的keyBy(KeySelector)或Python API中的key_by(KeySelector)来指定键。使用该方法后将产生一个键控流KeyedStream,它允许使用键控状态的算子。
键选择器函数(key selector function)接受一条记录作为输入,并返回该记录的键。键可以是任何类型,并且必须从确定性计算中得到。
Flink的数据模型不是基于键值对的。因此,不需要将数据集类型物理地打包到键和值中。键是“虚拟的”:它们被定义为实际数据上的函数,以指导分组算子。