淘先锋技术网

首页 1 2 3 4 5 6 7

在Flink中提供了StateBackend(状态后端)来存储和管理Checkpoint过程中的状态数据。StateBackend分为三种。
在这里插入图片描述

1. MemoryStateBackend

1.1 概念

在这里插入图片描述

1.2 特点及使用场景

MemoryStateBackend存储有如下特点:

  • 聚合类的算子状态数据会存储在jobManager内存中,因此对聚合类算子较多的应用会对jobManager的内存有一定的压力,进而对整个集群会造成较大的负担。
  • 虽然在创建MemoryStateBackend的时候可以指定内存大小,但是状态数据的传输大小也会受限于Akka框架通信的大小限制。
  • 最后就是JVM的内存容量受限于主机的内存大小,因此对于较大的状态数据不适合使用MemoryStateBackend。

在这里插入图片描述

2. FsStateBackend

2.1 概念

FsStateBackend和MemoryStateBackend不同,它是基于文件系统的一种状态管理器,这里的文件系统可以是本地文件系统,也可以是hdfs分布式文件系统。

2.2 特点及应用场景

  • 可以指定是本地文件系统或hdfs分布式文件系统存储状态数据
  • 默认使用异步的方式将状态数据同步到文件系统中,异步的方式可以尽量避免在checkpoint中影响流式的计算任务。
  • 相比MemoryStateBackend,FsStateBackend可以适用于状态数据量较大的场景下。
  • 状态数据如果使用hdfs存储可以有一定的容错率,由于副本的存在,数据更安全。

应用场景:

  1. 状态数据量较大的时候
  2. 应用中有时间范围非常长的窗口计算时

3. RocksDBStateBackend

3.1 概念

在这里插入图片描述

3.2 特点及应用场景

在这里插入图片描述