00:00
好,那刚才呢,咱们聊到了优化二这种方案其实是可以实现的。对吧,是可以实现的,哎,那我们用第二种方式,第一个呢,是用定时任务,不断的每隔一段时间去加载一次,对吧,第二种方式呢,我们直接监控这个配置信息就好了。啊,因为这种方案呢,能更好一点对吧?好,那既然要这样去做,我们要思考一下具体的代码,等会儿应该怎么去写了,我们得先心里边有一个规划。对吧,嗯。定时任务这种呢,倒好写一点,因为写到open方法里边就行了,它是一个流,现在关键的问题呢,我们如果说无论是用flink CDC去读取my circle的blog,还是说用from去监控文件。用t source对吧,监控文件传到卡,然后弗link就消费形成这个对吧,它都会是一个单独的流,要注意咱们是不是还有一个消费topic DB的。
01:14
数据流啊,对吧,我们还有一个这个流。那你肯定要写一个卡夫卡吧,对吧,这是卡夫卡的S啊,那这个是弗利CDC啊,或者说呢,这也有一个卡夫卡的S。啊,它是两个不同的主题,你肯定不能说往一个主题里边扔,对吧?好,那就形成了我们有两个流,那对于这两个流我应该。怎么处理呢?两个流的操作。咱们学过有哪些呀?对于两个流的操作。还有没毛病,还有呢。
02:04
啊,跟union对吧,好嗯。那我们想一下。这个地方我们该用谁?就目前来说,我们只学过这两个,其实还有一个招引,对吧,但是招引还没有学到啊,在这个项目当中呢,由我给大家去讲这招引应该怎么去做,对吧,实施。我们在connect跟union里边,大家觉得我们应该要用哪一个,你想一想我们的需求,对吧,再想一想这个connect跟union的一个功能。啊,它俩之间的一个区别。Connect呢,它只能连接两个流对吧,啊,两两去连接。啊,UN呢,它可以多个流,但是呢。它的类型必须得是一样的,也就未来你的处理方案。
03:05
是一样的。对吧,那很明显我们这两个流的数据肯定不一样吧,对吧,虽然你可以把它UN到一起,就是说你两个都写string类型吧,是可以用到一起,但是你接下来你就不好区分。这两个数据了。对吧,就不好区分这两个数据了,因为你形成一个流,你处理方案UI以后,它就形成了一个流。这个流呢,它只有一个处理方法对吧,而connect它不是connect连接以后呢,它有两个处理方法,一个叫process element1,一个叫process element2,对吧,它两个流分开处理的。啊,分开处理的好,那很明显呢,我们要用connect啊,然后具体一点怎么做呢?比如说我用这个数据流,我们把它称为主流可以吧。主流我去连接connect啊,连接什么呢?配置流。
04:06
对吧,好,里边呢有两个方法,一个process element1,一个叫process element,二,有两个方法吧,对吧?啊,那一呢是处理主流数据的,二呢是处理配置流数据的,那我们具体的应该怎么写呢?关键问题在于我们这个地方要做过滤,对吧,它是process方法,可以做到这个过滤。啊。呃,那我们对于主流数据要做过滤过滤的。条件什么呢?来自于配置流。对吧,所以我们想啊。这个。配置流我们应该怎么处理?就是说在处理主流数据的时候,我们需要用到配置流的数据。测输出。
05:04
把配置流。写到侧输出流是吗?啊。广播。我现在就是一个普通的连接,我就是连接两个普通的流。你广播流,你只是说把这个配置流改成广播流嘛,你我现在问的是process element2这个方法里边我们应该干什么事。你你你在这里边再写一个广播流不现实吧,你要广播流只能把这玩意儿做成广播流吧,现在不是聊广播流的事儿啊,现在我问你的问题,你要听清楚问题好吧,就是说我现在处理主流数据P对吧,Process element1。
06:00
这个方法里边。我们。干什么?要根据process element2。数据来做处理,对吧?现在的问题在于PROCESS2、我要干什么事?我的问题是这个你跟我说广播流它不太现实吧,你在这里边来搞一个广播流吗?不可能对吧,还没到广播流这一步。对吧,啊。没问题啊,两同学说了配置流数据存储下来,然后呢,那个方总也说了,这个状态是不是咱们遇到配置流数据来了,我们可以把这个数据干什么写到。状态里边对吧,而这一边呢,这边注意是写状态吧,而这边呢,咱是不是去读状态。咱把这个状态给它读出来。是不是就好?
07:00
能理解这个事儿吗?就是说当配置信息来了,我把它呢保存到状态里边,这个状态呢。不设置过期时间,也不去可利亚对吧,然后。主流数据来了,我呢,从状态里边把这个数据读出来,然后去做我们的过滤,对吧,把我们要的数据给它过滤出来。能理解吗?这一步就是我们所说的事情,对吧?对于配置流而言,我们应该写状态,而对于主流。数据就是我们数据流读取topic DB这个主题的。留,我们应该干什么事呢?读取状态,然后根据状态里边的字段。来做过滤,这一步OK吗?
08:05
这一步OK吗?嗯,就三个同学啊,其他同学呢。这块有问题是吗?这里边儿我们主流去连接配置流,对吧,它就会形成两个方法。啊,第一个方法处理主流数据,因为按照顺序嘛,你如果配置流去连接它,那第一个就是处理的配置流按顺序来的,对吧,一对一二对应二,它是这样子。对吧,好,那这里边儿呢,其实存在有问题。啊,有什么问题呢?比如说我的配置信息啊,注意看啊。配置信息对吧,有A。B。我有两个表的信息啊,我要我呢,未来有abcde对吧,这些个数据啊,我整个主流里边主流啊。
09:04
主流呢有ABC,比如说。三张表数据对吧,但是呢,我有两张为表,我们需要我只要AB,假如说数据这样子的好,呃,那现在呢,假如说它是多B型度来看啊。第一个病毒。第二个病毒。有两个冰度。对吧,好,那接下来呢,配置信息跟主流信息对吧,来了来了以后呢,配置信息有两条,那这个配置信息啊。他有没有可能A在这。B在这儿。啊,配置信息A在这儿,B在这儿,诶写到这个状态里边了,但是主流数据来了,主流数据呢,这个A表。这是一张表啊,未来是不是有很多数据啊,它有可能有什么主流数据啊,有A1。
10:00
L。A3A4,比如说四条好按照轮询对吧?啊A1。A2。A3。A4啊,假如呢,还有B1B2B3B4对吧?啊,或者说B1。第二按照逻辑时对吧,B1。B2,诶,他按照文学的规则,它是这样子的,那这里边出现了什么问题,大家想。出现了什么问题?就是按照我们方案对吧,这是第一个并行度,这是第二个变行度,当我们有多个并行度的时候,它会有什么问题?赖续啊。这可不是乱序这么简单呀,刘总啊。你只看到了乱序是吗?数据丢了,这个B有吗?没了。
11:01
这个A2A4有吗?没了,这可不是简单的乱序问题,直接丢了数据,这个B1没了。这个没了,因为你看啊,我A表的数据发送到第二个B1度的时候,这个第二个B度压根就没有关于A表的配置信息,那你是不是这个数据就过滤掉了,你不要了,对吧?同理这边关于B表的数据是不是就过滤掉了?大家想对不对?有没有问你?对吧,他会丢数据吧,啊,他会丢数据可不是乱序这么简单啊,如果乱序那就好了啊,那这个问题就简单了,对吧,他丢数据好,那这种问题我们该如何解决呢。我们怎么解决?
12:05
这个问题我们该怎么解决?怎么现在没有声音了?啊。对了啊,这个时候才到,大家之前猴急的说广播流的一个问题,对吧,那我把配置流做成一个广播流,然后呢,拿着主流跟广播流进行关联,那么既然配置流是一个广播流,那这个数据呢,就在AB都有了这边同理。也有AB了。对吧,因为我是一个广播流,所谓广播上游有的数据,下游每一个病度都有,要不然叫什么广播呀。对吧?啊,那到这一步才能引出来我们的广播流,对吧?啊,他一步一步来的啊,它也有问题,然后去解决这个问题,对吧?那用了广播流以后,是不是咱们配置信息做成广播流,我是不是可以做到将。
13:09
AB。AB2条数据放在所有的并行度里边了。这个问题是不是就得以解决了,对吧,我用一个广播流,诶那这个状态我们刚才说了配置信息呢,写到状态里边,那这个状态就用广播状态。对吧,用的就是广播状态,是不是就搞定了啊,因为咱们是要将配置信息写到所有的病行动里边,哎,用一个广播状态,对吧,这个有没有问题。我们是不是可以用那个广播状态啊。这个应该OK吧,因为老早就有同学在一直提广播流,广播流广播流对吧,好早就有人在提啊,到这一步来说呢,我们用广播流啊。
14:00
呃,那广播流他。未来会不会有问题呢?啊。就是这边再给他扩展一下,呃,我们可以用广播流。啊,这边呢,将我们最终的方案对吧,将配置信息。处理还广播流。啊,那未来呢,我们就可以使用广播状态,但是它这个缺点在于什么?他有缺点哈。广播流缺点在于什么?你没告诉我?对,如果说你数据量太大,那你的状态就非常大,而且你广播你是所有的并行度里边都有一份冗余,对吧?啊,如果配置信息。过大啊,冗余太大,冗余太多对吧,但是对于当前我们这个需求无所谓。
15:06
对于当前咱们这个需求是不是无所谓啊,对吧,因为我们就是配置一个。要几张为表,那不可能太大对吧?好,那假如未来大家也准备用这个广播流,遇到了这个可以声音光大,那我们还有什么办法可以解决这个问题呢?就是假如说这个地方我们真的配置信息特别大啊,不太好用这个广播流,因为你是几个变异度你就乘以几啊。对吧,你是完全备份关系啊,完全一样的有好几份了,对吧,那我们该还有什么办法解决这个问题呢?就是刚才我们所说的,对吧,这边呢,只有A。啊,然后呢,可能来了A1。B对吧,好这边呢,只有B。啊,配置信息只有B这边呢,来了A2B2,我们还有什么办法解决这个丢失数据问题啊。
16:07
想一想。过滤变异度设为一不好不好,这个肯定不好。对了啊,分K啊,你设置为一,这种方案不要提,以后都不要提。OK吧,这种方案就不要提了,生长环境当中绝对不允许的,你像那么大数据量,你设置不度为一,那不疯了吗?对吧,我们自己玩自己测试,为了简单省一点资源,对吧?我们可以设置这个变异度为一,那生产环境当中肯定不会出现这种情况。对吧,所以方总说的没毛病对吧,分K,那我对两个理由呢,进行keep。对吧,我按照表明是不是K呀。对吧,主流按表明可以办,配置流也按表明K办,拿着两个K半以后的。
17:04
流去连接,那我就能保证什么。这边一定不会出现B1对吧,这是L,哎,那这呢是什么B1。B对吧,按照K去划分啊,当然这种方案呢,它也有缺点,有可能会造成什么。这种它也有缺点,它的缺点是什么?啊,有可能会产生数据倾斜,对吧?啊,有可能产生数据倾斜啊,当然它的好处在于数据不会冗余。对吧,它每个病因度呢,都有一部分数据合在一起是一个完整的,对吧,如果你确定没有数据倾斜的情况,是不是它针对于这种配置信息过大的,是不是一个很好的处理方案。
18:03
对吧,啊,你要会这些东西啊,对吧,啊,你不不要只会这个广播流,这个就不太合适了,对吧?所以呢,我们也要知道诶,他可以按照KBY处理,我们无非想要做到什么事啊,想要做到的是将同一张表的数据与它的配置信息放到同一个病因度,如果能做到这个事儿就行了,对吧,两种方案。OK吧,啊,当然我们这选谁呀。当前我们这个需求选谁啊?选第一个还选第二个?选第一个还是选第二个?那很明显吧。对吧,啊,肯定是选第一个了,因为咱们的配置信息呢。并没有多大,很小啊,咱们的配置信息很小对吧,那我们只有46张表,就算你46张表都要,那也就46条数据,对吧,你冗余冗余呗,你搞100个比度又能怎么样呢。
19:06
对吧,数据量很小啊,只有46条,而且呢,你46个是我们全部的表,你就在生产环境当中1000张表,那你为表我打你500张够了吧。啊,你生产环境当中1000张表,我说你为表500张,那你也就是500条数据吧,那这个在我们大数据领域,你500条数据随便随便存对吧,随便存。你太小了,所以呢,对于我们这种配置信息而言,完全就用广播流就够了,你随便冗余对吧,所以数据量小呢,那我们肯定优先选择广播流这种方式,OK吧,好,那到这一步为止,我们将整个的需求就讨论结束了。这个需求还是蛮复杂的哈,对不对,对吧,啊,而且呢,这还是我们只是方案,真正实施起来还有很多困难的点呢。啊,还有很多困难点,好,接下来呢,我们就要开始动手写这个代码啊。
我来说两句