Flink:我们可以只更新 processBroadcastElement 函数中某些元素的键控状态吗?
Flink: Can we update a keyed state for only some elements in processBroadcastElement function?
如回答 中所述,我可以使用 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
而其他实例没有应用之后。
即使在 failure/recovery 或重新缩放之后,您也应该将自己限制在永远不会引起不一致的键控状态上。
如回答 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
而其他实例没有应用之后。
即使在 failure/recovery 或重新缩放之后,您也应该将自己限制在永远不会引起不一致的键控状态上。