当前位置:网站首页>字节跳动 Flink 状态查询实践与优化
字节跳动 Flink 状态查询实践与优化
2022-08-05 13:54:00 【InfoQ】
- 背景
- State Processor API 介绍
- StateMeta Snapshot 机制
- State as Database
- 使用 Flink Batch SQL 查询任务状态
- 未来展望
一、背景
二、State Processor API 介绍


- 首先创建 ExistingSavepoint 用来表示一个 Savepoint。初始化 ExistingSavepoint 时需要提供 Savepoint 路径和 StateBackend 等信息;
- 然后实现 ReaderFunction 用于重新注册所需要查询的 State 以及定义处理 State 的方式。查询状态的过程中会遍历所有的 Key 并按照我们定义的方式去操作 State;
- 最后,调用 Savepoint.readKeyedState 并传入算子的 uid 和 ReaderFunction,就可以完成 State的查询。


- 每次查询 State 我们都需要独立开发一个 Flink Batch 任务,对用户来说具有一定的开发成本;
- 实现 ReaderFunction 的时候需要比较清晰地了解任务状态的定义方式,包括 State 的名称、类型以及 State Descriptor 等信息,对用户来说使用门槛高较高;
- 使用 State Processor API 时,只能查询单个算子状态,无法同时查询多个算子的状态;
- 无法直接查询任务状态的元信息,比如查询任务使用了哪些状态,或者查询某个状态的类型。


- 如何对用户屏蔽 State 的信息:参考 State Processor API 我们可以知道,查询 State 需要提供非常多的信息,比如 Savepoint 路径、 StateBacked 类型、算子 id 、State Descriptor 等等。通过 SQL 语句显然难以完整地表述这些复杂的信息,那么查询状态到底需要哪些内容,我们又如何对用户屏蔽 State 里复杂的细节呢?这是我们面对的第一个难点。
- 如何用 SQL 表达 State:State 在 Flink 中的存储方式并不像 Database 一样,我们如何去用 SQL 来表达状态的查询过程呢?这是我们要解决的另一个难点。
三、StateMeta Snapshot 机制


- 首先在 State 注册的时候,Task 会把 operatorName\ID\KeySerializer\StateDescriptors 等元信息都保存在 Task 的内存中;
- 触发 Savepoint 时,Task 会在制作快照的同时,对状态的元信息也同样进行快照。快照完成之后将状态的元信息 (StateMeta) 和状态文件的句柄 (StateHandle) 一起上报给 JobManager;
- JobManager 在收到所有 Task 上报的 StateMeta 信息之后 ,将这些状态元信息进行合并,最后会把合并之后的状态元信息保存到 Savepoint 目录里名为 stateInfo 的文件中。
四、State as Database


- 对于 OperatorState 来说,它只有 Value 这一个属性,用来表示这个 State 具体的值。因此我们可以把 OperatorState 表示为只包含一个 Value 字段的表结构。
- 对于 KeyedState 来说,每个 State 在不同的 Key 和 Namespace 下的值可能都不一样, 因此我们可以将 KeyedState 表示为一个包含 Key、Namespace、Value 这三个字段的表结构。


五、使用 Flink Batch SQL 查询任务状态


六、未来展望




边栏推荐
- 2022-08-04 clickhouse的join子句
- 【Search box】General test case
- pandas连接oracle数据库并拉取表中数据到dataframe中、根据状态字段的变化情况筛选数据(shift滞后状态字段后作差、获取状态跳变的位置、最后跳变的位置为数据筛选的索引起点)
- 特种期货开户交易权限开通认定标准
- 用脚本启动和关闭jar包或者war包
- 更新数据到数据库和缓存的步骤
- 并发刺客(False Sharing)——并发程序的隐藏杀手
- 基于PCA模型的首个投资组合表现跟进(截止至2022.7.22)
- R语言patchwork包将多个可视化结果组合起来、plot_annotation函数以及tag_level参数将组合图用大写字母进行顺序编码、为组合图的标签添加自定义分割符号信息(separator
- 深度学习之 11 卷积神经网络实现
猜你喜欢
随机推荐
R语言ggplot2可视化:使用ggpubr包的ggparagraph函数可视化文本段落(将指定文本段落可视化出来)、使用ggarrange函数将文本数据和可视化图像组合起来(文本数据在可视化图像下方
机器学习:贝叶斯网络
DSPE-PEG-Thiol,DSPE-PEG-SH(MV:2000),磷脂-聚乙二醇-巯基低温储存
【Search box】General test case
Summary 623 of the force buckle solution - add a row to the binary tree
2022-08-04 Select clause for clickhouse
内存管理架构及虚拟地址空间布局
R语言patchwork包将多个可视化结果组合起来、plot_annotation函数以及tag_level参数将组合图用大写字母进行顺序编码、为组合图的标签添加自定义分割符号信息(separator
day5·全局与局部变量
一夜成名的航班追踪网站,什么来头?
Unity相机漫游脚本
国产虚拟化云宏CNware WinStack安装体验-6 集群HA功能测试
C#员工考勤管理系统源码 考勤工资管理系统源码
2022-08-04 Brighthouse: An Analytic DataWarehouse for Ad-hoc Queries
TVS和ESD的区别
Subnet Mask and Subnetting
2022华数杯华数杯A题 B题 C题 思路、程序实时更新
day6·动态导入模块
伙伴分配器的内核实现
Kernel implementation of buddy allocator









