ChunJun框架在数据还原上的探索和实践 | Hadoop Meetup精彩回顾
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/chunjun
https://gitee.com/dtstack_dev_0/chunjun
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/video/BV1sN4y1P7qk/?spm_id_from=333.337.search-card.all.click
袋鼠云开源框架钉钉技术交流qun(30537511),欢迎对大数据开源项目有兴趣的同学加入交流最新技术信息,开源项目库地址:https://github.com/DTStack/Taier
ChunJun框架在数据还原上的探索和实践 | Hadoop Meetup精彩回顾的更多相关文章
- 美团 iOS 端开源框架 Graver 在动态化上的探索与实践
近些年,移动端动态化技术可谓是“百花齐放”,其中的渲染性能也是动态化技术一直在探索.研究的课题.美团的开源框架 Graver 也为解决动态化框架的渲染性能问题提供了一种新思路:关于布局,我们可以采用“ ...
- 涂鸦基于OAuth2在开发者平台上的探索与实践
前言 开发授权(OAuth2)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资料(如照片.视频.联系人列表),而无需将用户名和密码提供给第三方应用. OAuth2允许用户提供一 ...
- DataPipeline丨新型企业数据融合平台的探索与实践
文 |刘瀚林 DataPipeline后端研发负责人 交流微信 | datapipeline2018 一.关于数据融合和企业数据融合平台 数据融合是把不同来源.格式.特点性质的数据在逻辑上或物理上有机 ...
- FPGA加速:面向数据中心和云服务的探索和实践
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由columneditor 发表于云+社区专栏 作者介绍:章恒--腾讯云FPGA专家,目前在腾讯架构平台部负责FPGA云的研发工作,探索 ...
- JuiceFS 在数据湖存储架构上的探索
大家好,我是来自 Juicedata 的高昌健,今天想跟大家分享的主题是<JuiceFS 在数据湖存储架构上的探索>,以下是今天分享的提纲: 首先我会简单的介绍一下大数据存储架构变迁以及它 ...
- SSM框架实现多张图片和其他数据一起上传
一.SSM+Form 多张图片和其他数据一起上传, 1.导包: commons-fileupload-1.3.3.jar commons-io-2.4.jar 2.springmvc.xml 文件配置 ...
- WEB 三维引擎在高精地图数据生产的探索和实践
1. 前言 高精地图(High Definition Map)作为自动驾驶安全性不可或缺的一部分,能有效强化自动驾驶的感知能力和决策能力,提升自动驾驶的等级.对于自动驾驶来说,高精地图主要是给机器用的 ...
- 公有云上构建云原生 AI 平台的探索与实践 - GOTC 技术论坛分享回顾
7 月 9 日,GOTC 2021 全球开源技术峰会上海站与 WAIC 世界人工智能大会共同举办,峰会聚焦 AI 与云原生两大以开源驱动的前沿技术领域,邀请国家级研究机构与顶级互联网公司的一线技术专家 ...
- HTML5——摒弃插件和前端框架的异步文件上传
之前我从来没有体会到HTML5的便利,直到这次需要一个异步上传的功能功能.一开始我以为文件的一些声明必须为HTML5才管用,后来才知道添加了很多以前没有的标签,并可以直接播放视频,音频等.可以不再使用 ...
- NetAnalyzer笔记 之 九 使用C#对HTTP数据还原
[创建时间:2016-05-12 00:19:00] NetAnalyzer下载地址 在NetAnalyzer2016中加入了一个HTTP分析功能,很过用户对此都很感兴趣,那么今天写一下具体的实现方式 ...
随机推荐
- Oracle 给用户赋予dblink权限,创建dblink
1.判断用户是否具备创建database link 的权限 一:查看当前登录用户(如果查询有返回行,则表示具备创建权限,否则,需要创建权限) 1 select * from user_sys_priv ...
- Oracle体系结构和用户管理
本篇博客将对Oracle的体系结构.存储结构.内存结构和进程结构进行初步介绍,从而从宏观上把握它的物理组成.文件组成和各种进程,对于进一步的了解可以起到很好地作用 一.Oralce体系结构 1.概述 ...
- 前端必备的 CSS 库,normalize.css
这是一个小 CSS 样式表,是著名的库,作为 CSS 基础样式的一部分,可消除客户端渲染不一致问题. 地址是 https://necolas.github.io/normalize.css/ 别小看这 ...
- MQ 如何保证数据一致性?
前言 上个月,我们有个电商系统出了个灵异事件:用户支付成功了,但订单状态死活不改成"已发货". 折腾了半天才定位到问题:订单服务的MQ消息,像人间蒸发一样消失了. 这个Bug让我明 ...
- 网络编程-Netty-writeAndFlush方法原理分析 以及 close以后是否还能写入数据?
前言 在上一讲网络编程-关闭连接(2)-Java的NIO在关闭socket时,究竟用了哪个系统调用函数?中,我们做了个实验,研究了java nio的close函数究竟调用了哪个系统调用,答案是clos ...
- sql server2008出现set 选项的设置不正确:"ARITHABORT”
( SELECT STUFF(( SELECT '','' + CODE FROM INVNEWSAL11 WHERE (MASTERI=BILRCV.SRCERI) OR (LINKERI IN ( ...
- 适合Java程序员的Go入门笔记
0.背景 3年java开发背景(因此这篇文章的特点是:比较适合java程序员doge),业余时间有了解过一些go,如今加入字节团队主要技术栈是go,此篇主要结合go语言圣经和团队内go项目,总结一些基 ...
- nodejs隐藏窗口启动redis服务,一个vbs文件即可
网上也有很多类似的,但基本都是用nodejs调.vbs,然后间接调.bat,经过多番尝试发现其实合并为一个文件亦可 将如下内容保存为.vbs文件,如startRedis.vbs (在nw的根目录) s ...
- DP刷题总结-2
同步于Luogu blog T1 AT_joisc2007_buildi ビルの飾り付け (Building) 简化题意 最长上升子序列模板 分析 \(O(n^2)\)做法 考虑DP 定义状态:\(d ...
- 11.23DP进阶总结
例.1 Luogu-P1387最大正方形 按如下复杂度来分析 O(\(n^6\)) O(\(n^5\)) O(\(n^3\)) O(\(n^2\log n\)) O(n^2) O(\(n^6\)) 最 ...