当前位置: 首页 > 知识库问答 >
问题:

Apache Flink:状态反序列化/序列化的频率是多少?

贲俊才
2023-03-14

Flink去/序列化操作员状态的频率是多少?每次获取/更新或基于检查点?状态后端有什么不同吗?

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

共有1个答案

路奇
2023-03-14

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

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

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

例如,ValueState始终作为一个整体进行反序列化,而MapState。get(key)仅序列化键(用于查找)并反序列化键的返回值。因此,应该使用MapState

rocksdbstatebend通过将文件复制到持久文件系统来检查其状态。因此,当采用检查点时,不涉及额外的序列化。

 类似资料:
  • I'va是一个OID接口,可以由许多具体类型实现: 现在我有一个具有两个字段的对象,一个使用抽象接口类型(OID)定义,另一个使用具体类型(MyOID)定义 我想使用jackson以不同的方式序列化/反序列化字段,无论它们是使用抽象接口类型还是具体类型定义的: 注意,被序列化,包括类型信息(多态序列化),而被序列化为文本 为此,我将OID接口注释为: 并为每个具体类型分配了类型id: 最后,对容器

  • 我对Jackson和类型层次结构有以下问题。我正在序列化一个类SubA,该类将扩展为一个字符串,然后尝试将其反序列化回来。当然,在编译时,系统不知道它是基还是SubA,因此我希望它是基,如果它是SubA,则会在编译后执行一些其他操作。 我的基本类看起来像: ...和一个派生自的类: ... 我试图执行以下代码: String是: 但我一次又一次地犯同样的错误。映射器现在知道如何处理另一个类参数-它

  • 我想为我们的REST API实现一个自定义的反序列化器,它不仅被Java应用程序使用。因此,我不想让Jackson将类型信息放入序列化的JSON中。 我目前正在努力反序列化<code>CollectionExpand</code>,因为它包含特定<code>ResourceModel</code>的<code>数据</code>列表。 < code>ResourceModel是一个接口,每个< c

  • 我的JSON字符串是: 我想要实现的是,当JSON中没有提供schemaVersion时,能够在默认情况下反序列化到SubClassV1,但即使在Superclass中将schemaVersion初始化为“1.0”时,我仍然会收到以下错误:

  • 我有一个接口,其中和实现。服务器会返回这样的响应- 相应的类来建模它是 中的声明它是哪种车辆。我需要反序列化的成一个对象取决于。如果是,我需要在反序列化和期间使用反序列化。 如何使用gson实现这一点? 编辑-这篇文章的不同之处在于类类型()包含在需要反序列化的中。这里不是。如果在内,我可以为编写自定义反序列化程序,检查,并进行相应的反序列化。但是我想我需要为编写一个自定义反序列化程序,在这里我创

  • 我正在尝试使用kryo序列化和反序列化到二进制。我想我已经完成了序列化,但似乎无法反序列化。下面是我正在处理的代码,但最终我想存储一个字节[],然后再次读取它。文档只显示了如何使用文件。