- 1.Flink 中最基础的状态类型是 ValueState,这是一种能够为被其封装的变量添加容错能力的类型。
ValueState
是一种 keyed state,也就是说它只能被用于 keyed context 提供的 operator 中,即所有能够紧随DataStream#keyBy
之后被调用的operator。 一个 operator 中的 keyed state 的作用域默认是属于它所属的 key 的。 -
ValueState
需要使用ValueStateDescriptor
来创建,ValueStateDescriptor
包含了 Flink 如何管理变量的一些元数据信息。状态在使用之前需要先被注册。 状态需要使用open()
函数来注册状态。 ValueState
是一个包装类,类似于 Java 标准库里边的AtomicReference
和AtomicLong
。 它提供了三个用于交互的方法。update
用于更新状态,value
用于获取状态值,还有clear
用于清空状态。 如果一个 key 还没有状态,例如当程序刚启动或者调用过ValueState#clear
方法时,ValueState#value
将会返回null
。 如果需要更新状态,需要调用ValueState#update
方法,直接更改ValueState#value
的返回值可能不会被系统识别。 容错处理将在 Flink 后台自动管理,你可以像与常规变量那样与状态变量进行交互。ValueState
的作用域始终限于当前的 keyValueState<Boolean>
实际上有 3 种状态:unset (null
),true
,和false
,ValueState
是允许空值的。- 当在使用 与key 相关的数据时,调用
KeyedProcessFunction
方法,还可以设置计时器,该计时器会在未来的时间执行回调函数。 - 删除定时器,需要用到状态来实现,标记状态后创建一个记录定时器时间的状态。,
Flink 学习- ValueState(官网信息描述)
于 2024-09-12 12:14:07 首次发布