IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 大数据—— Flink 状态后端(State Backends) -> 正文阅读

[大数据]大数据—— Flink 状态后端(State Backends)

由于有效的状态访问对于处理数据的低延迟只管重要,因此每个并行任务都会在本地维护其状态,以确保快速的状态访问。

状态的存储、访问以及维护,有一个可插入的组件决定,这个组件就叫做状态后端(State Backends)

状态后端主要负责两件事:

  • 本地的状态管理
  • 将检查点(checkpoint)状态写入远程存储

Flink 提供的状态后端:

  • MemoryStateBackend:内存级的状态后端,会将键控状态作为内存中的对象进行管理,将它们存储在 TaskManager 的 JVM 堆上,而将 checkpoint 存储在 JobManger 的内存中。(生产不用)
  • FsStateBackend:将 checkpoint 存到远程的持久化文件系统(FileSystem)上,面对于本地状态,跟 MemoryStateBackend 一样,也存到 TaskManger 的 JVM 堆上。
  • RockDBStateBackend:将所有状态序列化后,存入本地的 RockDB中存储。RockDB 是基于 KV的,可以看做是一个本地数据库(实际使用内存+磁盘)。checkpoint 存到远程的持久化文件系统(FileSystem)上。RockDB 是一个用于快速存储的可嵌入持久化键值存储。他通过 Java Native接口(JNI)与Flink进行交互。
状态后端特点场景
MemoryStateBackend快速、低延迟、但不稳定生产环境不用
FsStateBackend同时拥有内存级的本地访问速度和更好的容错保证,但还是会受到OOM影响分钟级窗口聚合、join
RockDBStateBackend超大状态的作业,对状态读写性能要求不高的作业天级窗口聚合

设置 StateBackend 的方式

1. 在配置文件中修改 flink-conf.yaml

jobmanager(即MemoryStateBackend)

filesystem(即FsStateBackend)

rocksdb(即RocksDBStateBackend)

state.backend:filesystem

state.checkpoints.dir:hdfs://namenode:9000/flink/checkpoints

2. 在代码中修改

//MemoryStateBackend
val env = StreamExecutionEnvironment.getExecutionEvironment
env.setStateBackend(new HashMapStateBackend)
env.getCheckpointConfig.setCheckpointStorage(new JobManagerCheckpointStorage)

//FsStateBackend
env.setStateBackend(new HashMapStateBackend)
env.getCheckpointConfig.setCheckpointStorage("hdfs://checkpoints")

//RockDBStateBackend
env.setStateBackend(new EmbeddedRocksDBStateBackend)
env.getCheckpointConfig.setCheckpointStorage("hdfs://checkpoints")

如果设置的是RockDBStateBackend,需要先引入依赖

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

RockDBStateBa 将正在运行中的状态数据保存在 RocksDB 数据库中,RocksDB 数据库默认将数据存储在 TaskManger 的数据目录。

运行中的状态首先写入堆外/本机内存,然后当达到配置的阈值时刷新到本地磁盘。这意味着 RocksDBStateBendback 可以支持大于总配置堆容量的状态,或者说其状态大小只受限于整个集群中的可用磁盘空间。另外,因为 RockSDBStateBendback 不使用 JVM 堆来存储运行中的状态,故也不受 JVM 垃圾回收的影响,具有可预测的延迟。

Checkpoint 时,整个RocksDB 数据库 被 checkpoint 到配置的文件系统目录中。少量的元数据信息存储到 JobManager 的内存中(高可用模式下,将其存储到 Checkpoint 的元数据文件中)。

除了完整的、自包含的状态快照之外,RocksDBStateBackend 还支持作为性能调优选项的增量 checkpoint。增量 checkpoint 仅存储上次checkpoint之后发生的改变。与执行完整快照相比,这大大减少了checkpoint的时间。Rock是DBStateBendback 是当前唯一支持增量 checkpoint 的状态后端。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-29 09:09:56  更:2021-08-29 09:27:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:47:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码