首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >配置了 RocksDB,Flink 中所有状态数据都会存在 RocksDB 吗?

配置了 RocksDB,Flink 中所有状态数据都会存在 RocksDB 吗?

作者头像
公众号:大数据羊说
发布2022-04-04 11:21:34
发布2022-04-04 11:21:34
1.4K0
举报
文章被收录于专栏:大数据羊说大数据羊说

1.大家首先要知道的一些背景

在说背景前,先说一下标题的结论:你配置的 rocksdb 只会影响 flink 任务中 keyed state 存储的方式和地方,flink 任务中的 operator state 不会受到影响。

状态:状态就是用户在程序中使用的数据结构。比如 flink 中的 MapState,ValueState,ListState。在一个 flink 任务中,不管我们使用了多少状态,这些状态只会分为 operator state,keyed state 两类状态。

状态管理:为了防止 long run 的 flink 任务挂了导致状态丢失,产生数据质量问题,flink 提供了状态管理(Checkpoint,Savepoint)的能力把我们使用的状态给管理起来,定时的保存到远程。然后可以在 flink 任务 failover 时,从远程把状态数据恢复到 flink 任务中,保障数据质量。

状态后端:状态后端就是决定了以什么样数据结构,什么样的存储方式去存储和管理我们的状态。flink 目前官方提供了 memory、filesystem,rocksdb 三种状态后端来存储我们的状态。

2.在配置不同的状态后端时,到底对 flink 任务有什么影响

其实所有的内容都浓缩到了这样图中:

sql 开发

  1. 横向(行)来看,分为 Operator state-backend、Keyed state-backend 来管理一个 flink 任务中的所有状态(operator state,keyed state)
  2. 纵向(列)来看,用户可以通过配置 memory,filesystem,rocksdb,在 flink 任务中生成 MemoryStateBackend,FsStateBackend,RocksdbStateBackend,其声明了整个任务的状态管理后端类型
  3. 每个格子中的内容就是用户在配置 xx 状态后端(列)时,给用户使用的状态(行)生成的状态后端实例,生成的这个实例就是用于管理用户使用的状态的。

那么可以得到的结论就是:

  1. flink 任务中的 operator state。无论用户配置哪种状态后端(无论是 memory,filesystem,rocksdb),都是使用 DefaultOperatorStateBackend 来管理的,状态数据都存储在内存中。
  2. flink 任务中的 keyed state,会有不同。用户在配置 rocksdb 时,会使用 RocksdbKeyedStateBackend 去管理状态;用户在配置 memory,filesystem 时,会使用 HeapKeyedStateBackend 去管理状态。
  3. 那么也就是说,你配置的 rocksdb 只会影响 keyed state 存储的方式和地方,operator state 不会受到影响。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据羊说 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.大家首先要知道的一些背景
  • 2.在配置不同的状态后端时,到底对 flink 任务有什么影响
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档