简介
本文主要讲述Flink有状态的流处理中所提供的各种状态后端(state backend) 。本文将介绍Flink当前所提供的3种状态后端的优缺点以及在具体需求案例中如何去做选择。
在有状态的流处理(stateful-steam-processing)中,为了发生故障时能够完全恢复故障前的数据, 开发者通常会在使用Flink时设置checkpoint。在使用checkpoint时候,通常要涉及到状态后端的选择以决定持久化的状态的存储方式与位置。
Flink 当前提供了以下3种开箱即用的状态后端:
-
MemoryStateBackend
-
FsStateBackend
-
RocksDBStateBackend
在缺省情况下,Flink默认使用 MemoryStateBackend。
01 .不同 State backend 吞吐量对比

FileSystem(FsStateBackend)和Memory(MemoryStateBackend)的吞吐差异不大(都是使用TaskManager堆内存管理处理中的数据),使用 RocksDB 的吞吐差距明显。
Standalone 和 on Yarn 的总体差异不大,使用 FileSystem 和 Memory 时 on Yarn 模式下吞吐稍高,而使用 RocksDB 时 on Yarn 模式下的吞吐低些。
02 .不同 State backend 延迟对比

使用 FileSystem 和 Memory 时延迟基本一致且较低。
使用 RocksDB 时延迟稍高,且由于吞吐较低,在达到吞吐瓶颈附近延迟陡增。其中 on Yarn 模式下吞吐更低,延迟变化更加明显。\
03. State backend 的选择
| StatBackend | in-flight | CP | 吞吐 | 推荐场景 |
| MemoryState | TM Memory | JM Memory | 高 | 开发与调试、对数据丢失或重复不敏感 |
| FsState | TM Memory | FS/ HDFS | 高 | 普通状态、大窗口、KV 结构 |
| RocksDBState |

本文深入探讨了Flink的三种状态后端——MemoryStateBackend、FsStateBackend和RocksDBStateBackend,包括各自的吞吐量、延迟特性和适用场景。MemoryStateBackend适合小状态任务,FsStateBackend适用于大状态和高可用场景,而RocksDBStateBackend是处理超大状态的最佳选择,支持增量checkpoint。
最低0.47元/天 解锁文章
1358

被折叠的 条评论
为什么被折叠?



