Hadoop是Apache基金会旗下最出名的基础架构开源我的项目之一。自2006年诞生以来,逐渐倒退成为海量数据存储、解决最为重要的根底组件,造成了十分丰盛的技术生态。

作为国内顶尖的 Hadoop 开源生态技术峰会,第四届 China Apache Hadoop Meetup于 2022年9月24日在上海胜利举办。

围绕“云数智聚 砥柱笃行”的主题,来自华为、阿里、网易、字节跳动、bilibili、安全银行、袋鼠云、英特尔、Kyligence、Ampere等多所企业单位,以及来自Spark、Fluid、ChunJun、Kyuubi、Ozone、IoTDB、Linkis、Kylin、Uniffle等开源社区的多位嘉宾均参加了分享探讨。

作为此次Meetup参加社区之一,也是大数据畛域的我的项目,ChunJun也带来了一些新的声音:

ChunJun框架在实时数据采集和还原上的实现和原理是怎么的?这段时间以来,ChunJun有哪些新倒退,对于将来倒退又有着怎么的新想法?

作为袋鼠云资深大数据引擎开发专家,徐超带来了他的分享,将从一个独特的角度来介绍ChunJun数据集成在数据还原上的摸索和实际。

一、ChunJun框架介绍

第一个问题:ChunJun这个框架是什么?无能啥?

ChunJun(原FlinkX) 是袋鼠云基于Flink 基座自研的数据集成框架,通过4年多的迭代,曾经成为一个稳固,高效,易用的批流一体的数据集成工具,可实现多种异构数据源高效的数据同步,目前已有3.2K+Star。

开源我的项目地址:

https://github.com/DTStack/ch...

https://gitee.com/dtstack_dev...

01 ChunJun框架结构

ChunJun 框架基于Flink 进行开发,提供了丰盛的插件,同时增加了断点续传、脏数据管理、数据还原等个性。

02 ChunJun批量同步

• 反对增量同步

• 反对断点续传

• 反对多通道&并发

• 反对脏数据(记录和管制)

• 反对限流

• 反对transformer

03 ChunJun离线

二、实时数据采集上的实现和原理

01 一个样例

02 ChunJun插件装载逻辑

03 ChunJun插件定义

04 ChunJun数据流转

05 ChunJun动静执行

面对监听多个表的状况,包含新增加表的数据,咱们如何执行上游的写入:

• 反对Update 转换 before,after

• 增加扩大参数,DB,Schema,Table, ColumnInfo

• 反对动静构建PreparedStatement

06 ChunJun距离轮询

什么是距离轮询?咱们是如何做的?

• 校验轮询字段类型,如果不是数值类型且source并行度大于1,报错不反对

• 创立三个数据分片,startlocation为null或者配置的值,mod别离为0,1,2

• 结构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;

• 执行SQL,查问并更新lastRow

• 第一次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;

• CP时获取lastRow中的id值,保留到state中

三、实时数据还原上的实现和原理

01 数据还原介绍

数据还原基于对应的数据库的CDC采集性能,比方下面提到的Oracle Logminer,MySQL binglog,反对将捕捉到的数据残缺的还原到上游,所以不仅仅包含DML,而且也须要对DDL进行监听,将上游数据源的所有变更行为发送到上游数据库的还原。

### 难点

· DDL,DML 如何有序的发送到上游

· DDL 语句如何依据上游数据源的个性进行对应的操作(异构数据源间DML 的转换)

· DML 语句中的insert update, delete 如何进行解决

02 一个样例

03 整体流程

数据从上游的数据源获取之后通过一些列的算子的解决之后按数据在原始表中的程序精确的还原到指标数据源,实现数据的实时获取链路。

04 DDL解析

### 数据还原- DDL转换

· 基于Calcite解析数据源DdlSql转为SqlNode

· SqlNode转为两头数据DdlData

· ddlData转为sql:不同语法之间相互转换;不同数据源字段类型相互转换

05 名字映射

在实时还原中,以后上下游表字段对应关系必须是雷同的,即上游的database schema table 对应的表只能写入上游database schema table雷同的表,同时字段名称也必须是雷同的。本次迭代将针对表门路能够进行一个自定义映射以及字段类型进行自定义映射。

• db or schema 转换

• 表名称转换

• 字段名(提供大小写转换),类型隐式转换

06 两头数据缓存

数据(不管ddl还是dml数据)下发到对应表名下的unblock队列中,worker在轮询过程中,解决unblock数据队列中的数据,在遇到ddl数据之后,将数据队列置为block状态,并将队列援用交给store解决。

store在拿到队列援用之后,将队列头部的ddl数据下发到内部存储中,并监听内部存储对ddl的反馈状况(监听工作由store中额定的线程来执行),此时,队列依然处于block状态。

在收到内部存储的反馈之后,将数据队列头部的ddl数据移除,同时将队列状态回归为unblock状态,队列援用还给worker。

07 指标端接收数据

• 获取到DdlOperator 对象

• 依据指标数据源对应的DDLConvertImpl解析器转换为指标数据源sql

• 执行对应的sql,比方删除表

• 触发调整DDLChange 表,批改对应的DDL 状态

• 两头存储Restore算子,监听状态变更,执行后续数据下发操作

四、ChunJun将来布局

• 提供对Session 进行治理

• 提供restful 服务,ChunJun 自身作为一个服务,便于外围零碎进行集成

• 对实时数据还原进行增强,包含扩大反对更多的数据源的DDL 解析

此外,本次分享的全文视频内容也能够随时观看,如果您有趣味,欢送返回袋鼠云B站平台观看。

Apache Hadoop Meetup 2022

ChunJun视频回顾:

https://www.bilibili.com/vide...

袋鼠云开源框架钉钉技术交换qun(30537511),欢送对大数据开源我的项目有趣味的同学退出交换最新技术信息,开源我的项目库地址:https://github.com/DTStack/Taier