StateBackend注意事项

MemoryStateBackend

  • Memory默认有5MBCheckpoint序列化数据限制。修改MemoryStateBackend构造函数可以增加大小。
  • 状态大小受到 akka 帧大小的限制,所以无论怎么调整状态大小配置,都不能大于 akka 的帧大小。也可以通过 akka.framesize 调整 akka 帧大小。
  • 状态的总大小不能超过 JobManager 的内存。

状态特别小也可以在生产环境使用MemoryStateBackend。例如Kafka Consumer等只有一条的状态。

FSStateBackend

  • 元数据在JobManager 的内存中(在高可用场景下会存在 Zookeeper 中)。
  • 当前State存在TM内存中,所以不能大于TM内存。

    RockDBStateBackend

  • RocksDB 支持的单 key 和单 value 的大小最大为每个 2^31 byte。这是因为 RocksDB 的 JNI API 是基于 byte[] 的。

  • 对于使用具有合并操作的状态的应用程序,例如 ListState,随着时间可能会累积到超过 2^31 字节大小,这将会导致在接下来的查询中失败。