Apache flink Flink:我们可以只更新processBroadcastElement函数中某些元素的键控状态吗?
如回答中所述,我可以使用Apache flink Flink:我们可以只更新processBroadcastElement函数中某些元素的键控状态吗?,apache-flink,Apache Flink,如回答中所述,我可以使用applyToKeyedState以相同的方式更新所有键的所有状态 如果我的广播事件具有所有键的子集,并且我只想更新这些键,那么我可以将其作为KeyedState函数的一部分吗 范例 ctx.applyToKeyedState(stateDescriptor, new KeyedStateFunction[K, ValueState[Boolean]]() { override def process(k: K, state: ValueState[Boole
applyToKeyedState
以相同的方式更新所有键的所有状态
如果我的广播事件具有所有键的子集,并且我只想更新这些键,那么我可以将其作为KeyedState函数的一部分吗
范例
ctx.applyToKeyedState(stateDescriptor, new KeyedStateFunction[K, ValueState[Boolean]]() {
override def process(k: K, state: ValueState[Boolean]): Unit = {
val key = k.asInstanceOf[String]
if (broadcastEvent.contains(key)) {
state.update(true))
}
}
})
没有什么可以阻止您在
KeyedStateFunction
中使用所需的任何逻辑,但您可能会陷入麻烦。问题在于:键控广播功能操作符的每个实例都将独立应用此功能。作业可能会在任何时候崩溃——可能是在某些实例应用了KeyedStateFunction
之后,而其他实例则没有
您应该将自己的操作限制在键控状态,即使在故障/恢复或重新缩放后,也不会导致不一致。谢谢David。这消除了我的顾虑。