00:00
这个叉啊,它是阿里巴巴开源出来的一个异构数据源离线同步工具啊,阿里巴巴开源出来的,说白了他这个里边的,呃,中文呢,对中文的支持就比较好嘛,毕竟是国内的一个公司。异构数据源同步离线工具。你看他又说了,致力于啊实现什么呢?包括关系型数据库,你像mys Oracle等等,以及hdms have odps,哎等等等等各种异购数据源之间的稳定高效同步功能,那大家可以看到啊,这个data叉啊,它支持的数据源种类还是比较多的,有这么多,那这呢是一个data叉它的官网,那我们也可以来官网上看一下啊复制。我们看看data叉的官网是啥?你看它就是一个getub,说白了data叉它根本就没有一个像样的官方网站,它只有一个getub上面的地址,我们看一看所有的嗯,Data HUB,所有操作相关的内容,它全都给我们放到官网上了,我们往下翻,你看这datax是阿里巴巴开源出来的这么一个什么什么啊,这这就是我们官网上的第一啊,文档上的第一句话,同样你看这data叉还有一个商业版叫做data works,那这是啥呀?
01:21
花钱的嘛,哎,它用起来可能更符合商业的模式,但没事,我们用开源的这个data叉就够了啊,就不用这个datawork斯了,那同样你看这还有一个features啥特色嘛,这X本身作为数据同步框架,将不同的数据源呢,从源头抽取成这个reader,完了又目标端抽取成writer,你看主要看这啊,理论上啊,Data叉可以支持任意数据源以及数据类型的同步工作,你看人家吹的很好,我支持市面上所有的数据源。哎,你所有的数据源我都能给你进行同步,同时这个叉呢,作为一个生态系统,每接入一套新的数据源,哎,我们可以这个也可以实现和之前已有的数据源之间互通,说白了这个data叉,Data叉它功能很强大,它呢任意任何的数据源理论上它都能支持同步啊。
02:20
那行,那接下来我们就看一看date叉我们应该怎么来用呢?你看在这也有一个文档叫做date叉的详细介绍,我点击它。过来了,那这就是data叉的详细介绍,Data叉它既然能支持你这么多数据源之间的同步,那它是怎么做到的呢?那首先我们要看一看data叉它的设计理念是什么?Data叉啊,它为了解决这个异构数据源之间的同步问题,它将复杂的网状模式改成了的简单的星型链路,啥意思?我们看一看什么叫网状模式,什么叫星型链路呢?在这呢,你比方说我现在要把my circle的数据我给你同到HDFS,那我就必须要学会两个组件,我要知道my circle怎么用啊,我还要知道HDFS怎么用,没有问题吧?然后呢,我还要通过一些语言呢,你比方说我通过Java啊,通过Java我读写一下MYSO的数据,然后呢,我再用Java把数据给它写入到HDFS里,我们是不是必须要学会两个组件的使用啊?
03:32
我每做一次同步,我是不是都得学会两个组件的使用,那好了,我现在要把Oracle的数据给同步到h base,我是不是也要学会Oracle怎么用,以及h base怎么用,我每同步一次,我都要学两个组件,那好了,我们看一看现在呀,Data叉它来了,那data叉能做到一个这个模式。我不是想把my soq的数据我给你同到HDFS吗?你只学习data叉就完事了,然后data叉它帮我们把my circlele的数据就给它同步到HDFS了,那我现在我又想把Oracle的数据给它同步到H位,那么我们也是只学习一个data叉就完事了,这个叉啊,它帮我们把Oracle的数据也给它同步到HDFS数据。
04:21
啊,也给它同到HDFS里,那这个就叫做把复杂的这么一个网状的链路给它改变成一个简单的星型链路了,好,那这个是data叉的设计理念啊,那接下来我们再看一看啥呢?嗯,你看这也是data叉的当前使用现状嘛,Data叉啊在阿里巴巴内会被广泛使用,哎,承担了很多的这个离线同步的业务,你看离线同步的业务,并且呀,持续稳定运行了六年之久,那我们为什么选择它呢?原因就是在这儿呢,持续稳定运行了六年之久,一个是。
05:00
这叫什么,我们在组件选型的时候,是不是有这么一个概念啊,我们回头看一下,在我们的资料里。笔记啊,我们在组件选型的时候有一个概念,在在在组件选型技术选型,技术选型这我们有一些考虑因素,叫做行内经验和技术成熟度,行内经验呢,你看。各个大厂阿里巴巴它已经稳定运行了六年之久了,那我们就可以直接用了,以及技术的成熟度,那稳定运行六年,相对来说这个技术的成熟啊已经啊还不错,所以说我们就可以直接拿过来用啊,就是这个意思。再来。嗯,来到我们的文档当中,那接下来我们在那还能看到啊,这有一个data叉,它的一个框架的设计,那data叉呢,它一共有这么多组件,你看data叉它本身作为离线的框,呃,离线同步的框架,它呢采用什么架构呢?采用的是framework加plug这么一个架构,那framework是什么呢?Framework呀,它叫主体框架plug它是一个插件,那也就是说我们用的是主体框架加插件的这么一个模式,这个叉用的就是主体框架加插件的这么一个模式,你看那它有什么好处呢?我们可以来看一看啊,我现在有这么一个主体框架,我现在要把MYSQL的数据我给你同到H次DFS,我呢,我就直接用MYSQL的这个读的插件来读取MYSQL的数据,然后放到把数据啊,通过framework来进行一些转化,那我接下来我再通过HDFS写的插件把。
06:42
那转化之后的数据给它写入到HDFS,那好了,我现在又有这么一个功能,我要把Oracle的数据给它写入到h base,那我们就在主体框架上,我再插两个插件就完事了,我再插一个读的插件啊,Oracle的读的插件我再插一个。
07:03
H base的写的插件,H base的writer,我不管要做什么数据源的同步,我都来一个插件就完事了,都往我们的framework上插啊,我读的插件和写的插件,那frame它都可以支持,好了我们再往下看,那在这呢,也有一些reader和writer,还有framework的介绍啊,你看ER呢,它是数据采集的模块,也就是我们读的插件,它负责采集我们数据源的数据,然后把数据发送给framework进行一些转化,那writer呢,它是写的模块,也就是我们写的插件,它呀会源源不断的从work当中取数据,然后写入到我们的。写插件所对应的数据存储当中,那主要看这个framework它做了哪些事儿啊,Framework呢,它就是连接我们reader和writer的,它是两者的这个传输通道啊,并且它有很多的功能,你看在处理的时候呢,它可以干嘛呀,作为一个数据的缓冲,也就是说framework数据我们可以放到framework当中,在framework上可以进行一个缓冲,我下游消费的比较慢,那怎么办?我在framework里缓冲一会儿,还有流控的功能。
08:15
啥意思?你下游消费的不是比较慢吗?那我让你在消费的时候,我控制一下你消费的速度,我们可以进行一个流速的消费速度的这么一个设置,来控制你的流速以及并发,那我下游可能消费能力比较强,那怎么办?我可以用多线程啊来同时的往下游写数据。就这意思,再来以及数据转化的核心问题,那数据转化我们想一想啊,你看在上面的这个图当中,我们是要把my circle的数据给它存储到HDFS,那MYS的数据和HDFS它们两个数据存储的格式能一样吗?
09:00
是不是会有一些差别呀?那么framework它就能帮我们转化,把my circle当中数据的存储格式给转化成HDFS的数据存储格式,那这个就是framework它要做的事。啊,那我们也可以回到文档当中,你看在文档当中这儿我们也有一个设计理念,哎,我们这也有一个框架设计啊,Data叉的这个设计框架啊,那我们的文档当中的这些图啊,以及文字啊,其实就是从官网当中来给它进行一个摘录的,好,那说完了这个data叉的设计理念以及框架呀,那接下来我们看一看data叉它的运行流程是什么样的啊好,双击这个PPT我们看一看,那data叉呢,它首先会把这一次同步给我们封装成一个job啊,假设我们要往MY把MY的数据同步到HDFS,首先我会给它封装成一个job啊,那这一个job呢,它就会启动一个data叉的进程啊,那接下来我们要同步这个MYSQL数据啊,我们以一张MYSQL表为例的话,哎,我们呢,可以给它切分成不同的task啊,那我这一个表,我给你切分成了四个。
10:15
Ask啊,同时同步,那什么意思呢?你看啊,我刚买circle这一张表,它现在有20条数据啊,这里有20条数据,这里吧,这里一共有20条,那切分成四个task,哎,给它切分成了四个task来工作,那每一个task你有20条啊,哎,那他们呢,每一个人负责同步这20条当中的其中一部分,那假设第一个task它同步的是零到。五条啊,它同步这个,那第二个他这个它同步的是五到十条啊,同步这个第三个他这个它同步的是十到15条啊这个,那第四个task它同步的是哎,这个15~20条,OK啊,那这个切分是由谁决定的呢?是由我们这个巴Li模块由它来决定的啊OK,好那。
11:13
默认的情况下是切分成多少个task呢?哎,默认的情况下啊,对于买circle来说,它只切分成一个task。哎,默认的情况下啊,一个表啊,一个表,这么说吧,一个表啊,我们的一个表,一个task,哎,默认的情况下,那如果说我们做了一些自定义的规则,那它就会基于死文例来给我们进行一个切分啊好,那我们这一个表可以切分成多个task来同步,那多个task来同步,诶我同步也就是我读买circle的这个速度是不是要快呀?好啊,多个task一起工作嘛,OK,好,那稍后我们再说他这个,呃,具体要是切分的话啊,它是如何来切分的,我们先知道我们这一张表,哎,可以给它切分成多个task来工作,好,再往下看,呃,那切分完task之后,我们要开始执行这个task呀,哎,那我切分完了就直接执行吗?哎,还没有它呀,还有一个task group的概念,叫做task组啊,那schedule模块呢,会对task进行分组啊,每一。
12:23
一个task组,我们呢,就叫做一个task group,然后呢,每一个这个task group它负责一定的并发啊,负责一定的并发干嘛呀?哎,来运行我们的task,那这个并发度默认是多少呢?啊,每一个task它默认的并发度是五个。五个什么意思呢?代表我们当前这一个task group,它可以同时执行五个task。啊,五个task,注意我说的是同时执行五个task,但并不代表它必须要同时执行五个task,叫做最多啊,最多同时执行五个task,因为它默认的并发度是五个,那如果说我们在这里就只有两个task怎么办?哎,那他俩他也执行啊,有几个他就执行几个,但是最多是执行五个,那好了,现在有这么一事。
13:21
我这儿现在有两个组啊,有两个组,那我有十个task,那你有五个,然后呢,你这里五个,哎,是不是刚刚好啊,那他俩正好这十个同时运行,那好现在有这么一个事儿,那你说我这五个task。他俩执行啊,这五个task他们都执行完了,那执行完了之后,他们必须要同时执行成功啊,还是我执行一个出去一个啊,我现在有五个task这么样啊,我这有123455个task,他们现在这五个正在执行呢,那你说我是执行一个出去一个呢。
14:00
啊,我是执行一个出去一个呢,还是要必须等待这五个都执行完,他们一起出去啊,哎,那肯定是我执行完一个出去一个,然后我这边假设再有任务在这排队呢,那么他再进来,诶这个就像我们去饭店吃饭一样,那我们去饭店吃饭,那你说我这儿有五张桌啊,有12345,每个桌坐一个人,那我这个人进来了啊,这个人也进来了,然后他们五个人,哎,分别坐了一张桌,那必须要等待这五个人都吃完,他们五个人一起出去吗?啊,肯定不能,哎,吃一个走一个,然后剩下的呢,再进来嘛,哎,这叫做流,哎流逝的方式啊,流水的方式嘛,流水珠啊,吃一个走一个,吃一个走一个,OK,那再来。那这个地方就这么一个点啊,这个要注意单个task group,它的并发度是这个参数比较重要啊。再往下,那现在已经每一个task分完组了,分完组之后就开始执行了啊,每一个task呀,它呢,在执行的时候都会开启一个reader,一个channel和一个writer啊,由这么一个线程来完成啊,那这个有一句话叫什么呢啊。
15:16
每一个task,它都会持有一个。那这个channel就是我们所说的什么呢?就是我们上面所说的task group的一个并发度,那么我们这一个task group它可以同时拥有几个啊,哎,是不是拥有五个啊,哎,它可以同时拥有五个,因为它的并发度是五啊,OK啊,那如果说我这个task执行完了,它会把这个channel给释放出来啊,那我下边的这个任务再进来了,那这个channel由新进来的这个pass钢来持有啊。OK,那么这个就是data叉的一个任务流程啊,那你看这个读的组件干嘛呢?它是读买circle的数据,那我这个task假设啊,这个我给它一个编号TASK1。
16:07
TASK2 task3task4,那这个呢是1234 OK,那我们这个task它同步哪一块数据啊?我这一个表一二,我给他分了四块,这个是零到五,这个是五到十,十到15 15~20,那我TASK1是不是同步这块啊,那对应的我这个reader它读哪啊,是不是就读零到五这一块数据啊,那怎么读呢?啊,Select信用from表肯定是不行啊,但是我们这是不是有一个切分模块啊,告诉你我这个task它就读零到五的数据,那么我task这个reader在执行的时候是不是就可以select星from表where ID。大于等于零,小于等于五,哎,给他限定一个范围,是不是就可以读这一块了,OK,那每一个task啊,都读他们自己的这一块就完事了,好,那这个就是我们data差的一个运行流程,好,那这呢,我们还留了两个悬念,第一个。
17:08
我们这个lit模块它是如何切分的啊,第二个呢,我们这还有一个schedule模块,那我们这每一个task它给我们分发到哪一个task group当中呢?以及我们会生成多少个task group呢?有几个组啊好,那这个呀,由我们的schedule模块来确定啊,那稍后我们有一个案例会在案例当中来告诉大家split模块以及schedule模块它是如何来进行切分的啊啊这我暂停一下。
我来说两句