- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 视频嵌入链接 文档嵌入链接
- <iframe src="https://www.slidestalk.com/slidestalk/6ChunJun96161?embed&video" frame border="0" width="640" height="360" scrolling="no" allowfullscreen="true">复制
- 微信扫一扫分享
6.徐超-ChunJun 数据集成在数据还原上的探索和实践
展开查看详情
1 .
2 .ChunJun 框架在数据还原上 的探索和实践 演讲人:徐超 (ChunJun项目负责人、袋鼠云 大数据引擎开发专家)
3 .目录 01 ChunJun介绍 02 实时数据采集上的实现和原理 03 实时数据还原上的实现和原理 04 ChuJun未来的规划
4 .01 ChunJun介绍
5 .ChunJun 框架基本介绍 ChunJun 这个框架是什么?能干啥? ChunJun(原FlinkX) 是袋鼠云基于Flink 基座自研的数据集成 框架,经过4年多的迭代,已经成为一个稳定,高效,易用的 批流一体的数据集成工具,可实现多种异构数据源高效的数 据同步,目前已有3.2K+Star 开源地址:https://github.com/DTStack/chunjun
6 .ChunJun框架的架构 ChunJun 框架基于Flink 进行开发,提 供了丰富的插件,同时添加了断点续 传、脏数据管理、数据还原等特性
7 .ChunJun-批量同步 支持增量同步 支持脏数据(记录和控制) 支持断点续传 支持限流 支持多通道&并发 支持transformer
8 .ChunJun-离线
9 .02 实时数据采集上的实现和原理
10 .一个样例
11 .ChunJun 插件装载逻辑
12 .ChunJun 插件定义
13 .ChunJun 数据流转
14 .ChunJun 动态执行 面对监听多个表的情 况,包括新添加表的数据, 我们如何执行下游的写入? 支持Update 转换 before,after 添加扩展参数,DB,Schema,Table, ColumnInfo 支持动态构建PreparedStatement
15 .ChunJun 间隔轮询 什么是间隔轮询?我们是如何做的? 1.校验轮询字段类型,如果不是数值类型且source并行度大于1,报错不支持 2、创建三个数据分片,startlocation为null或者配置的值,mod分别为0,1,2; 3、构造SQL:不同SQL的取余函数不同,各自插件实现 select id,name,age from table where (id > ? and ) mod(id, 3) = 0 order by id; select id,name,age from table where (id > ? and ) mod(id, 3) = 1 order by id; select id,name,age from table where (id > ? and ) mod(id, 3) = 2 order by id; 4、执行SQL,查询并更新lastRow 5、第一次result查询完后,若脚本中没有配置startlocation,则之前的查询SQL为: select id,name,age from table where mod(id, 3) = 1 order by id; 将其更新为: select id,name,age from table where id > ? and mod(id, 3) = 1 order by id; 6、CP时获取lastRow中的id值,保存到state中
16 .03 实时数据还原上的实现和原理
17 .数据还原介绍 什么是数据还原:数据还原基于对应的数据库的CDC采集功能,比如上面提到的 Oracle Logminer,MySQL binglog,支持将捕获到的数据完整的还原到下游,所以 不仅仅包括DML 而且也需要对DDL 进行监听,将上游数据源的所有变更行为发送 到下游数据库的还原; 难点: 1. DDL,DML 如何有序的发送到下游; 2. DDL 语句如何根据下游数据源的特性进行对应的操作(异构数据源间 DML 的转换) 3. DML 语句中的insert update, delete 如何进行处理;
18 .一个样例
19 .整体流程 数据从上游的数据源获取之后经过一些列的算子的 处理之后按数据在原始表中的顺序准确的还原到目 标数据源,完成数据的实时获取链路。
20 .DDL 解析 数据还原-ddl转换部分主要是 1. 基于Calcite解析数据源DdlSql转为SqlNode 2. SqlNode转为中间数据DdlData 3. ddlData转为sql a. 不同语法之间互相转换 b. 不同数据源字段类型互相转换
21 .名字映射 在实时还原中,当前上下游表 字段对应关系必须是相同的,即 上游的database schema table 对应的表只能写入下游 database schema table相同的表,同时字段名称也必须是相 同的。本次迭代将针对表路径可以进行一个自定义映射以及字 段类型进行自定义映射 1.db or schema 转换 2.表名称转换 3.字段名(提供大小写转换),类型隐式转换
22 .中间数据缓存
23 .中间数据缓存 • 数据(不论ddl还是dml数据)下发到对应表名下的unblock 队列中,worker在轮询过程中, • 处理unblock数据队列中的数据,在遇到ddl数据之后,将数 据队列置为block状态, • 并将队列引用交给store处理,store在拿到队列引用之后, 将队列头部的ddl数据下发到外部存储中, • 并监听外部存储对ddl的反馈情况(监听工作由store中额外 的线程来执行), • 此时,队列仍然处于block状态;在收到外部存储的反馈之 后,将数据队列头部的ddl数据移除, • 同时将队列状态回归为unblock状态,队列引用还给worker
24 .目标端接收数据 1.获取到DdlOperator 对象 2.根据目标数据源对应的 DDLConvertImpl解析器转换为目标数据源sql 3.执行对应的sql,比如删除表 4.触发调整DDLChange 表,修改对应的DDL 状态 5.中间存储Restore算子,监听状态变更, 执行后续数据下发操作
25 .04 ChuJun未来的规划
26 .未来规划 对实时数据还原进行加强,包括扩 展支持更多的数据源的DDL 解析 规划 提供restful 服务,ChunJun 本身作为 一个服务,便于外围系统进行集成
27 .加入我们 开源项目地址: https://github.com/DTStack/chunjun https://gitee.com/dtstack_dev_0/chunjun 钉钉扫码加入 微信扫码关注 ChunJun开源技术交流群 ChunJun开源技术公众号
28 .