如何只需一个调用即可清除整个MapSate状态



我知道,如果我执行mapState.clear(),我将能够将所有值清除到特定键的状态中,但我的问题是:有没有一种方法可以执行类似mapState.clear()的操作,只需一次调用即可将所有状态清除到mapStates中?将类似于CCD_ 3;真";因为mapState中的所有密钥都已清理,而不仅仅是当前密钥。

谢谢。谨致问候!

因为我们谈论的是嵌套映射的情况,所以很容易混淆我们的术语。让我们把这个问题放在一个例子的上下文中。

假设您有一个关于用户的事件流,并且在KeyedProcessFunction中,您使用MapState<ATTR, VALUE>为每个用户维护属性/值对的映射:

userEvents
.keyBy(e -> e.userId)
.process(new ManageUserData())

在流程函数中,任何时候使用MapState,您都只能为用户操作与正在处理的事件相对应的一个映射,

public static class ManageUserData extends KeyedProcessFunction<...> {
MapState<ATTR, VALUE> userMap;
}

因此userMap.clear()将清除一个用户的属性/值对的整个映射,而不使用其他映射。

我相信你在问是否有办法同时为所有用户清除所有MapStates。是的,有一种方法可以做到这一点,尽管它有点晦涩,而且实现起来并不完全简单。

如果您将本例中的KeyedProcessFunction更改为KeyedBroadcastProcessFunction,并将广播流连接到用户事件流,那么在该KeyedBroadcastProcessFunction中,您可以在processBroadcastElement()方法内部使用KeyedBroadcastProcessFunction.Context.html#applyToKeyedState来迭代所有用户,并为每个用户清除其MapState。

你必须安排在广播流上发送一个事件,只要你想这样做。

您应该注意文档中关于使用广播状态的警告。请记住,processBroadcastElement()中实现的逻辑在所有并行实例中必须具有相同的确定性行为。

相关内容

  • 没有找到相关文章

最新更新