gpt4 book ai didi

apache-flink - Apache Flink : How often is state de/serialized?

转载 作者:行者123 更新时间:2023-12-04 05:11:48 28 4
gpt4 key购买 nike

Flink de/serialise operator state 的频率如何?每个获取/更新还是基于检查点?状态后端是否有所作为?

我怀疑在具有不同键(数百万)和每个键每秒数千个事件的键控流的情况下,反/序列化可能是一个大问题。我对吗?

最佳答案

你的假设是正确的。这取决于状态后端。

在 JVM 堆上存储状态的后端( MemoryStateBackendFSStateBackend )不会为常规读/写访问序列化状态,而是将其作为对象保存在堆上。虽然这会导致访问速度非常快,但您显然受到 JVM 堆大小的限制,并且还可能面临垃圾收集问题。获取检查点时,对象将被序列化并持久化,以便在发生故障时进行恢复。

相比之下,RocksDBStateBackend将所有状态作为字节数组存储在嵌入式 RocksDB 实例中。因此,它为每次读/写访问对 key 的状态进行反/序列化。您可以通过选择适当的状态原语来控制“多少”状态被序列化,即 ValueState , ListState , MapState , 等等。

例如,ValueState总是作为一个整体去/序列化,而 MapState.get(key)仅序列化键(用于查找)并反序列化键的返回值。因此,您应该使用 MapState<String, String>而不是 ValueState<HashMap<String, String>> .类似的考虑适用于其他状态原语。
RocksDBStateBackend通过将文件复制到持久文件系统来检查其状态。因此,在执行检查点时不涉及额外的序列化。

关于apache-flink - Apache Flink : How often is state de/serialized?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51518816/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com