Operator State 的实际应用场景不如 Keyed State 多,它经常 被用在 Source 或 Sink 等算子上 ,用来保存流入数据的偏移量或对输出数据做缓存,以保证 Flink 应用的 ExactlyOnce 语义。 Operator State只和并行的算子实例绑定,和数据元素中的key无关,每个算子实例中持所有数据元素中的一部分状态数据。也即是说整个0p...
* ReducingState-》ReducingStateDescriptor创建而来 * OperatorState: * 应用到非KeyBy算子之上的State,与并行度的数量有关,有多少个并行度就有多少个OperatorState * ListState-》ListStateDescriptor创建而来 * * 使用KeyedState进行单词统计 * 以前直接使用现成的算子既可以实现数据存储State,但是通过自定义实现State可...
所以 Flink 对 Keyed State 进行了非常完善的包装,我们不需实现任何接口就可以直接使用。 而对于 Operator State 来说就会有所不同。因为不存在 key ,所有数据发往哪个分区是不可预测的;也就是说,当发生故障重启之后,我们不能保证某个数据跟之前一样,进入到同一个并行子任务、访问同一个状态。所以 Flink 无法...
首先区分一下两个概念,state一般指一个具体的task/operator的状态【state数据默认保存在java的堆内存中】,而checkpoint【可以理解为checkpoint是把state数据持久化存储了】则表示了一个Flink Job在一个特定时刻的一份全局状态快照,即包含了所有task/operator的状态。 注意:task是Flink中执行的基本单位。op...
2、使用 Operator State 1)、CheckpointedFunction 1)、带状态的 Source Function 3、Broadcast State 三、示例 1、keyed state示例:实现地铁站哪个进站口人数最多 2、operator state示例:模拟kafkasourceconsumer 本文详细的介绍了state的概念、使用场景、持久化、批处理中的使用,同时介绍了三种state(即keyed state和op...
按键分区状态(KeyedState)对这两个功能都要考虑;而算子状态(OperatorState)并不考虑key的影响,所以主要任务就是要让Flink了解状态的信息、将状态数据持久化后保存到外部存储空间。 看起来算子状态的使用应该更加简单才对。不过仔细思考又会发现一个问题:我们对状态进行持久化保存的目的是为了故障恢复;在发生故障...
对于状态数据重分布策略的使用,可以在创建operatorState的过程中通过相应的方法指定:如果使用Even-split Redistribution策 略,则通过context. getListState(descriptor)获取OperatorState;如果使用Union Redistribution策略,则通过context.getUnionList State(descriptor)来获取。实例代码中默认使用的Even-split Redistribution策略。
一、State 在Flink中,按照基本类型,对State做了以下两类的划分: Keyed State,和Key有关的状态类型,它只能被基于KeyedStream之上的操作,方法所使用。我们可以从逻辑上理解这种状态是一个并行度操作实例和一种Key的对应, <parallel-operator-instance, key>。 Operator State(或者non-keyed state),它是和Key无关的一...
相对于其他流计算框架,Flink 一个比较重要的特性就是其支持有状态计算。即你可以将中间的计算结果进行保存,并提供给后续的计算使用:具体而言,Flink 又将状态 (State) 分为 Keyed State 与 Operator State:2.1 算子状态 算子状态 (Operator State):顾名思义,状态是和算子进行绑定的,一个算子的状态不能被...