【Flink】状态后端(1.13版本及大于1.13版本适用)

时间:2025-04-09 07:13:31

Flink为什么越来越受欢迎,在大数据领域计算容错很重要,Flink计算容错手段之一就是checkpoint机制,会把数据保存在CheckPoint中,数据会随着 CheckPoint 而持久化,以防止数据丢失、保障恢复时的一致性,那么CheckPoint到底保存在哪里呢?答案是状态后端中。

1.13版本及1.13版本后的新版本Flink状态后端发生一些改变

新版本的Flink状态后端为如下2种

  • HashMapStateBackend
  • EmbeddedRocksDBStateBackend

 HashMapStateBackend:(数据以 Java 对象的形式存储在堆中。 Key/value 形式的状态和窗口算子会持有一个 hash table,其中存储着状态值、触发器。适用于有较大 state,较长 window 和较大 key/value 状态的 Job)

(1)HashMapStateBackend之只放内存,等同于前面版本的MemoryStateBackend,这种情况适用于开发时使用,使用方式

StreamExecutionEnvironment env = ();
(new HashMapStateBackend());
().setCheckpointStorage(new JobManagerCheckpointStorage());

(2)HashMapStateBackend之把状态放到文件系统,用作容错,可以生产环境使用,红色的部分可为”hdfs://namenode:40010/flink/checkpoints” 或 “file:///data/flink/checkpoints”。

StreamExecutionEnvironment env = ();
(new HashMapStateBackend());
().setCheckpointStorage("file:///checkpoint-dir");

EmbeddedRocksDBStateBackend:(将正在运行中的状态数据保存在RocksDB数据库中,RocksDB 数据库默认将数据存储在 TaskManager 的数据目录,适用于状态非常大、窗口非常长、key/value 状态非常大的 Job,可用在生产环境)

使用方式

1、引入maven依赖

<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-statebackend-rocksdb_2.11</artifactId>
    <version>${}</version>
    <scope>provided</scope>
</dependency>

2、使用EmbeddedRocksDBStateBackend,红色的部分可为”hdfs://namenode:40010/flink/checkpoints” 或 “file:///data/flink/checkpoints”。

StreamExecutionEnvironment env = ();
(new EmbeddedRocksDBStateBackend());
().setCheckpointStorage("file:///checkpoint-dir");