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。这消除了我的顾虑。