第 192 题:流处理的状态后端,RocksDB vs Heap的适用场景?
题目
流处理的状态后端,RocksDB vs Heap的适用场景?
完整讲解
一、状态后端的作用
状态后端:负责流处理中 keyed state(如 ValueState、MapState)与运行时状态的存储、访问与 checkpoint 持久化。选型影响吞吐、延迟、状态规模与恢复速度。
二、RocksDB
- 特点:状态存于本地磁盘(通过 RocksDB),单机可支撑大状态(GB~TB 级);checkpoint 时异步持久化到分布式存储。适用:状态量大、允许一定磁盘 IO 延迟、需要增量 checkpoint 以减小 IO 的场景。
- 代价:读写经 RocksDB,延迟与吞吐不如纯内存;JNI 与序列化有额外开销;需预留本地磁盘与 IO 能力。
三、Heap(内存)
- 特点:状态全在 JVM Heap,访问快、延迟低。适用:状态量小(百 MB 级以内)、对延迟敏感、可接受 checkpoint 时全量快照(或不依赖大状态)的场景。
- 限制:状态受 GC 与堆大小 限制,过大易 OOM;checkpoint 多为全量,状态大时 IO 与恢复慢。
四、选型小结
- 状态小、要低延迟 → Heap;状态大、要可扩展 → RocksDB。生产常见用 RocksDB 兜底大状态,或按作业分:轻量作业 Heap、重状态作业 RocksDB。
面试要点
- 能说清状态后端的职责:keyed state 存储与 checkpoint;能对比 RocksDB 与 Heap 的存储介质与特点。
- 能说明 RocksDB 适用大状态、Heap 适用小状态与低延迟;能简述增量 checkpoint 与 RocksDB 的配合。
- 能给出选型建议:状态规模、延迟、GC 与磁盘 IO 的权衡。
记忆要点
- RocksDB:本地磁盘、大状态、增量 checkpoint;Heap:内存、小状态、低延迟。
- 选型:状态小/低延迟→Heap;状态大/可扩展→RocksDB;注意 GC 与 OOM。