00:00
那么接下来我们具体详细的看一下这个五个流程,五个阶段是怎么做的,第一个窗口的一个切分,切分的话比较简单一点,在原码当中我们可以看到它会找到当前数据当中最大的这个ID,然后接下来呢,按照我们之前所说的。哎,这个地方里米的十啊,并不是十对吧,那我们要找一个什么东西呢?在这个地方要做分页查询啊,就是这个值,刚才我们看到的8096这个值。按照8096做C1啊,然后呢,确定每一个片段,哎,从几到几,比方说在这个当中我们可以看到创个零,从no到K1 K1到K10K100104啊,104啊,那最大值嘛,这是第一个,这是最后一个创口,好,所以呢,这个比较简单,要根据主见来做一个划分就好了,在这个当中,那接下来呢,我们就将数据分成了16个窗口,零到15 16个窗口,接下来第二步要分配,哎,将我们零到。十五十六个窗口呢,翻发到south read去读取,也就是说由task measurelo来执行当前这个任务啊,那这样的话实现了并行读取啊,变行录取,那么此时每个创客呢,可以单独的做产方运的,当某个创客失败,那我需要需要单独启动当前这个任务就够了,而不需要向1.x重新录取。
01:21
对吧?好,那这个呢,就比较简单一点,这个比较好理解实现解决这两个问题,比较好理解一个变形一个的问题,对吧?好之后呢,如果每一个source reader保证了数据一致性,那全表就保证数据一致性,毋庸置疑的啊,那关键就在于如何一个source read来保证数据一致性啊,这个是2.0改进当中最重要的一个点,我们需要去了解一下,也就是说关于数据读取这块。首先在读取当中呢,我们又分为五个阶段。啊,第一步是怎么做的?来在source reader当中读取表的信息之前,先给log做一个位置记录,叫低位点。
02:06
啊,这很关键的,接下来查询我自身区间,比方说我第一个区间是从一读到十的。我需要从一读到十,此时blog的位置呢是9000,好,那在第一步读取之前把9000保存下来,第一位点,然后呢,我一读到十不加锁去读啊,因为此时不加锁的话,可能对一到十之间数据有所修改,你这个lo呢还会往上加。对吧,那第二步读过来,数据并不着急输出,先放在环境当中B里边第三步。查询完之后,由于我们说了不加锁这个blog呢,它会往上增,因为可能对这个数据做修改,可能对其他数据有修改。对不对,好,那有可能会变多,变成了1万,那这个时候呢,把1万记录下来,第一次记到9000,第二次记得1万。好,记住中间呢是读取MYSQL数据查询的方式,那么第四步呢,用增量部分去消费。
03:07
槟。啊,也就是说会把9000~1万中间的这个blog呢,做一个消费。消费出来以后,发现中间有一到十。这个主件的数据的话,那我需要对内存档数据做一个修改。啊,需要对它做一个修改才能输出做一个更正。啊,做一个更正是这样子的啊,第第五步呢,就做一个更正才能输出。啊,当我们把这个做完之后,那那么此时一到十这个数据是不是相当于是在高位点的时候,最后的一个瞬时数据。大家想一下是不是,那么在这个当中,我们也可以看到是这样的东西。什么样的东西呢,比方说在这边。首先呢,数据我们也分为blog记录有S,也就是说原本的原表数据和新增的这个数据对吧,那原表数据呢,可能查出来有这样的一堆数据。
04:08
啊,K1到K7,但是在我查的时候,它的一个低位点,我记录的是到这。就都在这,好,那我就从这记录一个DV点之后去读取了K1到K7啊WINDOW8否这个数据,那么接下来呢,在我读取过程当中,很明显这个数据呢,又有了更新,删除修改,类似于这样操作,一直我读完K1到K7的时候,可能做了这些的更新,这是高位点,因为这个中间它的一个更新是怎么样。是发生在我读取K1到K7的过程当中的,好那么接下来呢,原本的K2它有值对不对?好中间呢,把K2做了一个更新,那也就K2变成了第一次先更新了108,那接下来K3删除掉了,K3不要了。啊,不输出了,那K2呢,又从108更新到119啊,108变成119啊,中间过程注意最早的时候100中间又经过108,又经过了119啊,那高位点到来之前还有一个K5。
05:13
好一个K5 K5呢从77变成了100,之前呢是77变成100,好,那么最后我们输出的结果K1不变,K4K7不变,因为在我们低位点到高位点中间并没有对K1K4K7做任何的修改,所以它就是原表的数据就好了,那么K3被删除掉了,就不输出了,K2K5分别做了修改,而且K2做了两次修改,K5做了一次修改,而我们真正输出的时候,K2输出最终结果119,而K5输出100。就够了,好,那这时我们看到它是通过这种方式来保证数据的一致性。啊,就算我不加表不加锁,也能够做到这样的事情。
06:00
啊,我希望大家可以理解这个事情,因为最终输出呢是这样子。这是输出,而高位点之后发生的变化,对吧,那此时呢,我们就新来的数据变化,正常输出所有数据做一个输出,而此时这个数据。是我们全量阶段读取的最终的结果,也就是说截止到这为止最终的一个映射。一个快照啊,是这样的数据,OK,呃,这个我们聊清楚了,单个并行度,但是有个问题,那多个并行度在同时运行的时候,那大家想一下,我们每个人的低位点跟高位点是不是都有可能不同。对吧,那我如何保证在高位点的时候精准一次性呢?啊,就是这个一致性,数据一致性呢,那么我们放在3.4节去聊的好,我们通过源码的方式来看到这个现象,好呃,那之后呢,我们把这个整个大体的流程聊完,接下来做完之后,每个人呢,这个橙色线部分对吧,做一个汇报啊,汇报给我们的。
07:05
之后呢,完成之后汇报如图所示,对吧,接下来呢,汇报信息,他接收到所有人的汇报信息之后,他可以开启一个。新的叫lo。啊,读取我们的老数据。啊,多学我们平常数据,那么此时这个时候呢,它是一个诶。单并发来读取的啊,因为一个人负责一个文件嘛,就是单个的负责文件,那这是增量部分。啊,增量部分。就是说在我们做初始化的时候,我们该看到它分两步,第一步呢全量读取,第二步增量,这个就比较好理解了,因为你整个的全部做完之后,我就可以读取B数据了,对吧?而我们刚才注意一下,在我们说的这个读取过程当中,从第四步开始,这两步它也属于增量当中的一个点。啊,增量当中做处理的好,这是我们所说的核心流程,一定要注意一下,首先分为五大步。
08:04
首先,创口切分分配读取汇报分配。在读取过程当中,我们又分为了五步。啊,先进入低位点读取,买这个表里面的原生数据,进入高位点,然后接下来增量部分消费的时候,从低位点读取到高位点,对八副数据做一个修正。啊,好,这是我们所说的,它是通过这种方式来保证EDX3个痛点都在发生的。一个问。
我来说两句