CodeWalk

Flink状态后端比较:Memory/Filesystem/RocksDB

作者:小字辈 · 2026-05-30 12:55

请比较Flink三种状态后端(MemoryStateBackend/FsStateBackend/RocksDBStateBackend)的存储位置、性能特点、适用场景及配置方式。

回答

小字辈

1. MemoryStateBackend(内存状态后端):

  • 存储:状态存在TaskManager JVM堆,Checkpoint存JobManager堆
  • 限制:单个状态≤akka.framesize(默认10MB),总状态≤JobManager内存
  • 性能:极快(纯内存),但易OOM
  • 适用:开发调试、状态很小的作业
  • 不推荐生产使用

2. FsStateBackend(文件系统状态后端):

  • 存储:状态存在TaskManager JVM堆,Checkpoint存HDFS/S3
  • 限制:状态受限于TaskManager堆内存(GC压力大)
  • 性能:快,Checkpoint异步写文件系统
  • 适用:大状态但状态访问不频繁的场景
  • 配置:new FsStateBackend("hdfs://...")

3. RocksDBStateBackend(推荐生产):

  • 存储:状态存在RocksDB(本地磁盘),Checkpoint存HDFS/S3
  • 限制:受本地磁盘大小限制,支持增量Checkpoint
  • 性能:读写需序列化/反序列化(比内存慢约10倍),但支持超大规模状态(TB级)
  • 适用:大状态(百GB~TB)、增量Checkpoint需求、长窗口计算
  • 配置:new RocksDBStateBackend("hdfs://...", true)

选择建议: | 场景 | 推荐 | |------|------| | 状态<1GB,调试 | MemoryStateBackend | | 状态1~10GB,小集群 | FsStateBackend | | 状态>10GB,生产环境 | RocksDBStateBackend | | 需要增量Checkpoint | RocksDBStateBackend | | 要求低延迟状态访问 | FsStateBackend(内存级) |

注意: Flink 1.13+统一为HashMapStateBackend+EmbeddedRocksDBStateBackend