前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ChunJun框架在数据还原上的探索和实践 | Hadoop Meetup精彩回顾

ChunJun框架在数据还原上的探索和实践 | Hadoop Meetup精彩回顾

原创
作者头像
袋鼠云数栈
发布于 2022-10-10 06:39:33
发布于 2022-10-10 06:39:33
5150
举报
文章被收录于专栏:数栈技术分享数栈技术分享

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
Lombok介绍、使用方法和总结
1 Lombok背景介绍 官方介绍如下: Project Lombok makes java a spicier language by adding 'handlers' that know how to build and compile simple, boilerplate-free, not-quite-java code. 大致意思是Lombok通过增加一些“处理程序”,可以让java变得简洁、快速。 2 Lombok使用方法 Lombok能以简单的注解形式来简化java代码,提高开发人员的开发
猿人谷
2018/03/28
1.6K0
Lombok介绍、使用方法和总结
lombok使用基础教程
前言 lombok是一个编译级别的插件,它可以在项目编译的时候生成一些代码。在很多工具类的项目中都有这个功能。比如dagger。 通俗的说,lombok可以通过注解来标示生成getter settter等代码。我们自然可以通过编译器比如IDEA的Generate生成,为啥要用这个? 在项目开发阶段,一个class的属性是一直变化的,今天可能增加一个字段,明天可能删除一个字段。每次变化都需要修改对应的模板代码。另外,有的class的字段超级多,多到一眼看不完。如果加上模板代码,更难一眼看出来。更有甚者,由于字
Ryan-Miao
2018/03/14
1.7K0
lombok使用基础教程
lombok在java项目中的使用
@NoArgsConstructor@RequiredArgsConstructor@AllArgsConstructor
jinjunzhu
2020/08/20
6580
Lombok中关于@Data的使用
当你在使用 Lombok 的 @Data 注解时,其实会有一些坑需要关注,今天就让我们来见识一下。
健程之道
2019/11/03
6860
超级全面的 Lombok 注解介绍,学一波!
blog.csdn.net/riemann_/article/details/105374987
全栈程序员站长
2021/06/29
5.1K0
lombok优缺点
最近上网查资料发现很多人对lombok褒贬不一,引起了我的兴趣,因为我们项目中也在大量使用lombok,大家不同的观点让我也困惑了几天,今天结合我实际的项目经验,说说我的个人建议。
崔笑颜
2020/12/29
2.1K0
Lombok 安装及使用指南
为了减少写一些 get/set/toString 方法,让项目代码更加整洁,提高开发效率,发现大家都开始采用 Lombok 这个工具。Lombok 是一个 Java 类库,它会自动插入编辑器和构建工具,用于帮助开发人员消除 Java 中冗长样板代码。而我们开发人员所要做的,仅仅是添加几个 Lombok 中的注解,就可以替换掉原来的多行 get/set/toString 方法代码,既简洁也易于维护。下面我们就来看看,如何安装并使用这一工具。
村雨遥
2021/09/16
9960
Lombok 安装及使用指南
今天 1024,为了不 996,Lombok 用起来以及避坑指南
Lombok 项目是一个 Java 库,它会自动插入编辑器和构建工具中,Lombok 提供了一组有用的注解,用来消除 Java 类中的大量样板代码。
双鬼带单
2020/10/29
7960
这些极简的注解你都清楚吗
lombok 是一个非常神奇的 java 类库,会利用注解自动生成 java Bean 中烦人的 Getter、Setter,还能自动生成 logger、ToString、HashCode、Builder 等 java 特色的函数或是符合设计模式的函数,能够让你 java Bean 更简洁,更美观。lombok 的思想非常先进,它让我们省略繁琐的样板代码,不要在重复的代码上花费太长时间,它也是Java语言演进过程中必然出现的一种思想,要用20% 的时间做 80%的事情。下面就来看一下 lombok 的具体用法。
cxuan
2019/08/02
1.5K0
为什么有的团队严禁使用Lombok?
Java,作为一款非常热门的编程语言,尽管它有着非常丰富的语言特性,完全面向对象编程,编程高度规范化,但是也有一个最受大家诟病的一个缺点:啰嗦,尤其是当你开发了很多年之后,你会明显的感受到,相比动态语言,java 定义变量之前,要先创建类,然后定义变量类型,每个类要写很多的get/set/toString/hashCode/equals等等方法。
Java极客技术
2022/12/02
5690
为什么有的团队严禁使用Lombok?
Lombok详解
1. Lombok简介 官网地址:https://projectlombok.org/ Lombok项目是一个Java库,它会自动插入您的编辑器和构建工具中,从而为你优化Java代码。 所以可以不用再手写一个getter、setter或equals方法。 2. 变量使用介绍 2.1 val修饰变量 可以使用val作为局部变量声明的类型,而不用实际编写该类型。 当您执行此操作时,将从初始值设定项表达式中推断出类型。 局部变量也将成为final类型的变量。 此功能仅适用于局部变量和foreach循环,不适用于字
牧晗
2020/06/05
1.3K0
Lombok详解
带你快速入门 Java开发神器 lombok
在写JavaBean对象时候 每次都要重复Alt+insert写Getter/Setter toString 有参构造 和 无参构造 特别麻烦 浪费时间 今天给大家推荐神器lombok 官方支持的神器 可以帮您省去大量时间 让代码简洁易读
陶然同学
2023/02/27
2610
带你快速入门 Java开发神器 lombok
Java使用Lombok详解
Lombok 是一种 Java 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注释实现这一目的。通过在开发环境中实现 Lombok,开发人员可以节省构建诸如 hashCode() 和 equals() 、getter / setter 这样的方法以及以往用来分类各种 accessor 和 mutator 的大量时间。
鱼找水需要时间
2023/03/28
7980
Lombok快速入门
为什么说Lombok可以使代码更简洁、可以消除冗长代码呢?我们来拿lombok官网的一个例子来说:
端碗吹水
2020/09/23
1.1K0
Lombok快速入门
CTO:不要在代码中写 set/get 方法了,逮一次罚款...
刚开始学习 Java 语言的时候,面向对象的三大特征就是封装,继承,和多态。在 Java 中,要保证封装性,需要将成员变量私有化,对外提供 set/get 方法来访问,虽然现在的 IDE,像 eclipse,IDEA都提供了快捷键,来生成 set/get 方法,但是在做项目的时候,一个 JavaBean 往往会有很多的成员变量,一个变量对应两个方法,如果有10几个成员变量,那么会对应20多个方法,也许还要去写构造器、equals 等方法,而且需要维护。这样一来,会使代码变得非常冗余,这些显得很冗长也没有太多技术含量,一旦修改属性,就容易出现忘记修改对应方法的失误。
开发者技术前线
2020/11/23
5570
CTO:不要在代码中写 set/get 方法了,逮一次罚款...
lombok让你提高代码整洁度的神器附教程及原理分析
在Java编程的过程中,我们在Code Entity的时候通常使用 IDE的generator来生成 get set toSting equals hashcode Constructor 等方法,有了lombok以后就不会了,它会在编译的过程中,分析AST抽象语法树的方式,把这些方法插入到编译以后的代码当中,这样做的好处可以降低代码量,让代码变得更容易读 程序源码 @Data public class User { int id; String name; } 编译后的代码 public
Albert陈凯
2018/04/03
7360
【侠客行】Lombok深度解析
Lombok能以简单的注解形式来简化java代码,提高开发人员的开发效率。例如开发中经常需要写的javabean,都需要花时间去添加相应的getter/setter,也许还要去写构造器、equals等方法,而且需要维护,当属性多时会出现大量的getter/setter方法,这些显得很冗长也没有太多技术含量,一旦修改属性,就容易出现忘记修改对应方法的失误。
大蕉
2019/09/23
6480
【侠客行】Lombok深度解析
子类使用lombok 的 @Builder 注解的正确姿势
在实际开发中,有时候需要对子类使用lombok的 @Builder注解来使用builder模式构造该子类对象。
明明如月学长
2021/08/31
2.3K0
子类使用lombok 的 @Builder 注解的正确姿势
Lombok有啥牛皮的?SpringBoot和IDEA官方都要支持它!
Lombok是一款Java代码功能增强库,在Github上已有9.8k+Star。它会自动集成到你的编辑器和构建工具中,从而使你的Java代码更加生动有趣。通过Lombok的注解,你可以不用再写getter、setter、equals等方法,Lombok将在编译时为你自动生成。
macrozheng
2021/01/06
9570
Lombok有啥牛皮的?SpringBoot和IDEA官方都要支持它!
Lombok 使用小结
Lombok 简介 Lombok 是一种 Java 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注释实现这一目的。通过在开发环境中实现 Lo
静默虚空
2018/01/05
7270
相关推荐
Lombok介绍、使用方法和总结
更多 >
LV.2
这个人很懒,什么都没有留下~
目录
  • 一、ChunJun 框架介绍
    • 01 ChunJun 框架结构
    • 02 ChunJun 批量同步
    • 03 ChunJun 离线
  • 二、实时数据采集上的实现和原理
    • 01 一个样例
    • 02 ChunJun 插件装载逻辑
    • 03 ChunJun 插件定义
    • 04 ChunJun 数据流转
    • 05 ChunJun 动态执行
    • 06 ChunJun 间隔轮询
  • 三、实时数据还原上的实现和原理
    • 01 数据还原介绍
      • 难点
    • 02 一个样例
    • 03 整体流程
    • 04 DDL 解析
      • 数据还原 - DDL 转换
    • 05 名字映射
    • 06 中间数据缓存
    • 07 目标端接收数据
  • 四、ChunJun 未来规划
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档