Flink:我们可以只更新processBroadcastElement函数中某些元素的键控状态吗



正如这里的答案中提到的,我可以使用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之后,而其他实例没有。

您应该限制自己对键控状态的操作,即使在失败/恢复或重新缩放后,也不会导致不一致。

相关内容

  • 没有找到相关文章

最新更新