apache-flink - 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
,而其他实例则没有。
您应该将自己限制在不会引起不一致的键控状态上的操作,即使在失败/恢复或重新缩放之后也是如此。
推荐阅读
- scala - JWTSigner 符号不允许 Map[String, AnyRef]
- javascript - Yajra/Jquery 数据表如何根据条件排除记录
- php - 如何根据来自 API 的数据在 PHP 中创建 slug URL?
- c# - 如何在 UWP 中将键盘加速器文本向右对齐?
- jenkins - 从詹金斯从詹金斯管道作业发送获取请求的问题
- visual-studio-2019 - VS2019中如何解除Sonar服务器与项目的绑定?
- .net-core - 如何在 Discord.NET 中通过公会 ID 和频道 ID 发送消息
- java - Java if-else结构优化
- angular - 具有本地化 Angular 应用程序的 IIS
- matlab - 如何在经纬度地图上绘制数组?