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");