正如这里的答案中提到的,我可以使用applyToKeyedState
以相同的方式更新所有键的所有状态。
如果我的广播事件有所有键的子集,并且我只想更新这些键,我可以将其作为KeyedStateFunction的一部分吗?
示例
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
之后,而其他实例没有。
您应该限制自己对键控状态的操作,即使在失败/恢复或重新缩放后,也不会导致不一致。