共计 2889 个字符,预计需要花费 8 分钟才能阅读完成。
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