00:00
好,那接下来呢,我们继续聊第三章的内容。刚才是关于弗Li CDC的一个编程,也就第二章整个的都完成了,那么第三章呢,是2.0当中的一些新的东西,呃,下面呢,我用了一些图片,但是这个图片呢,都来自于之前我们北京站七月份的时候,弗林格它的一个分享会上面。啊,来自于这个PPT里边的东西,当然我也将这个资料呢,放到了这个当中,资料文件夹里边整个的PDF。啊,7月10号的一个分享会对吧?啊,7月10号的一个分享会,好,那这个地方呢,我们来看一下它主要更新了什么内容啊,就解决了哪些问题,第一个我们先聊一下一版本的一个痛点。啊呃,A方面的痛点呢,主要在于第一个一致性,通过加速保证什么意思?在我们做数据初始化的时候,第一次做初始化的时候,是不是要先查询所有的表,那为了保证数据一致性,Fli当中呢,Li搜里边它需要对我们的库或者表啊去加锁。
01:06
去加锁,这导致业务没办法去操作我们的股,一般这个时候DBA呢不给权限。啊,不给权限,那如果说我们不加锁直接导数据,很有可能在这个过程当中会发生数据一致性,因为刚读完这个数据之后,它发生了一个变更,或者什么样子,对不对,好这个时候呢,就不太合适了,第一个啊,要加速去保证数据一致性,第二个。在我们读取的数据的时候,只能。单并发。啊,没没办法做到多并发同时读取,如果说我们数据量非常大,而且特别是在全量阶段,因为我们知道在增量阶段,就是说来一条数据消费条的时候,往往数据量呢,没那么大,对吧,就是全量,假如我原本这个表当中存在于几亿条甚至十几亿条数据,那么同步的时间是非常久的。因为你是单并发的,好,那第三个痛点呢,也很关键,在于全量阶段,还是对于我们初始化的第一个阶段查询全表数据的时候,那么它在全量阶段呢,不支持checkpoint,如果失败它只能重新录取,那再加上我们有可能这个表非常大,以及总共可能需要读五个小时。
02:22
我读了四个小时的时候,任务挂掉。要重新读,那这个就太可怕了,对吧?这是一点痛点,其实2.x的提出就是解决这三个问题,那么接下来我们就看一下如何去解决这个问题,对吧?啊设计目标,2.x的设计目标就是解决,第一无锁,不需要加锁就能够做到数据一致性,第二个水平扩展,也就是多变度,第三个。支持我们的CK,如果说你任务挂掉了,我可以从checkpoint或者point去恢复这个任务,而不需要从头开始做计算。啊,这是目标,那也就是说接下来具体的我们需要看一下如何实现这个功能的,那么第一个在于设计实验这一块啊,呃,我们整体的流程呢,是这样子的。
03:10
在我们注意这个当中呢,我们的表必须有主见,而现在在业务库当中,往往我们的表呢都会有主见,对有主见这个表做初始化模式第一阶段,也就是说全量读取表中数据的时候,主要分为五个阶段,第一个做。创口切分。啊,那也就是说教我们的表要做一个。一小块一小块,每个人负责自己一块,等我们详细的去聊这个事情啊,第二个就是分配,那我切分好了以后,分配给不同的人去运行,那这样的话是不是实现了我们并行读取了,因为之前只能有一个lo运行去读取,现在呢可以并行读取,因为我做了切分啊,同时每一个人给自己做checkpoint,那你当前这个任务假如我分成了三份。
04:03
某其中某一个挂掉了,做了切放的,那我只需要把这一个重新运行就好了,不需要全局的重新运行,所以当前第一个它的一个窗口的切分和分配,这个里引入哎实现了并行读取数据和check框的一个功能,那第二个就是窗口的一个读取。好,那分配给你以后,那你要读数据,这个过程当中实现了无所读取。啊,可以不加锁来做到数据的一致性啊,那具体的我们下面再聊,现在呢,我们只要了解一下流程之后呢一个汇报,最后呢重新再做一次分配。好,那这里就有两次分配,但是这两次并不一样,我们到时候再说,其实这个呢是它的一个全量阶段的分配,这个呢是增量。就是最后呢,读取最新的并lo数据所做的一个分配,好,那我们整体流程先看一下啊,首先是什么情况,我口述一下啊,在我们的MY搜个表当中有一张表库当中有一张表,这张表呢有主见,那么第一步根据主见将我们的表拆成很多个窗口,比方说第一个窗口一到十啊,就组建一到十,第二个11~20啊,以此类推,对吧,那这个地方。
05:23
是这样的,当然了,那这个参数能不能设置呢?可以啊,默认的呢,我们也可以看一下在这边啊,我们大家看一下,嗯,Connect这个参数呢,其实可以设置连接属性当中,好,呃,那在这。8096啊,也就是说一到8096对吧,然后接下来。8097到。8096加8097这样的输数据啊好呃,那这个是我们所看的第一步要做切分,第二步呢叫分配,这个比较好理解一点,对不对,那我。
06:00
读取零一到十。那这一部分数据呢,交给你,第二个可能是11~20,那把这一部分任务呢交给你。啊,交给你去处理。对吧,那这样的话就实现了可以并行读取,那由于我开始都分配好了,你就读一到十有主见的对不对啊,那就算你这一部分任务挂掉了,我可以做拆方的挂掉了啊,我可以重新起来任务呢,我知道我读一到十并不需要从头开始,我只需要诶这个内容。那你挂掉,其他的是好的,11~20已经读完了。啊,已经读过了,我可以写出去,那一到十重新读就够了,所以呢,在这个过程当中实现了两个功能,就是说刚才我们说的分配切分加重新分配,这样的方式,实现了第一个并行录取,第二个切换的功能。啊,那接下来呢,就真正的去读取数据,读取数据这一部分呢,是最核心的一块,所以呢,等会我们详细的去聊这块不聊了啊,在每一个变动当中,他自己读自己的那一到十。
07:05
好,那这个呢,读11~20。啊,那这个当中呢,实现无锁读取,那无所读取保证一致性,大家可以思考一下,这个东西很复杂。因为如果没有锁,我读了一道十,我刚读完,可能我把一读过之后,一呢做了一次修改。那我读的就不是最新的数据,那我为了全量阶段保证最新的数据,他肯定要引入一些内容来做这个事情,对不对?具体的详细的来聊这个事儿,好,那第四步叫创客汇报,每个人做完之后由有checkpoint对不对?所以呢,需要将上游汇报你已经做完了,当所有的创口全部做完之后,因为刚才我们说了做创客切分是对于我们数据全量阶段做的一个区分,那全量做完以后,是不是要我们唤醒增量阶段,从blog最新的位置开始读取数据?
08:00
对吧,所以汇报好以后,他收集到所有人的汇报信息,那么启动。增量的数据。啊,启动增量的数据,好,那最后呢,就是分配增量的任务开始运行,那增量阶段呢,只需要一个边路去读取就好了。啊,所以这是我们所说的2.0,它解决我们刚才所说的1.x版本当中三个痛点问题。它的一个核心的流程啊,但是具体的我们接下来聊聊。
我来说两句