前言
flink sql ETL 逻辑:source 多个表,select 多表 同时 group by 字段
flink sql 多表ETL执行计划
1、source 表数据以表主键分发 2、以from 表为主表, 多表关联时以主表关联字段分发到下游算子 3、存储所有算子的状态(包括join 、group by)
flink sql etl 状态流程[猜想]
1、insert : insert 一条 key - value , 同时group by 对应key的value + 1(假设是 count); 2、delete:join 状态会insert 一条key - null , 同时group by 状态基于此减1 (不是重算) 3、update:join 状态会先insert 一条key - null , 同时group by 状态基于此减1 ; 然后再insert 一条 key - value , 同时group by 会加1 (不是重算);相当于是先delete后再insert
flink 基于RockDB的状态存储
RockDB数据库:
- 基于LSM树结构,实现快速写,读稍慢【相对写而言】;
- 是一种K-V数据库
- 插入100W数据,查询第50W条对应的一条数据,查询耗时0ms [毫秒]
LSM 树型结构思想: 1、磁盘顺序写 + 多个树(状数据结构) + 冷热(新老)数据分级 + 定期归并 + 非原地更新。 2、横跨内存和磁盘的,包含多颗"子树"的一个森林 3、内存中的Level 0子树一般采用排序树(红黑树/AVL树)、跳表或者TreeMap等这类有序的数据结构,方便后续顺序写磁盘。 4、磁盘的树:数据按key排序后顺序写到磁盘上的文件
flink 初始化慢的优化思想
离线计算好每个算子的状态,存储在RockDB , flink 启动任务读取RockDB状态进行消费数据【估计要改源码】@一个低调的同事的优化思想
|