00:00
大家其实发现了,我们在把这个数据表里边的数据要写入到外部系统的时候,其实涉及到一个问题,就是。就是外部系统支不支持我们去做更新操作对不对,那假如说它支持这个更新操作的话,大家其实会想到我应该能够直接把它写入进去,对不对?呃,直接你你把那个更新之后的那个表啊,直接往外部输出就完事了,但如果说他不支持更新操作的话,像我们刚才看到的写入到文件系统,或者说写入到卡卡里边去的时候,这个时候是不是就完全不能把那个经过,呃,就是有有这个更新操作的表直接写入啊,诶所以这里边它是由什么来控制的呢?诶大家注意,这就是提出一个概念,在flink流处理里边,Table用table API进行流处理的过程当中,有一个非常重要的概念,就叫做更新模式。更新模式,顾名思义就是说你要指指定我当前如果出现对应的这个,呃,操作的话,对吧,它到底要不要更新,它的这个模式到底是什么样,所以这里边其实是我们必须要指定,你要把数据写出去的时候,最终我们还是流逝的嘛,那么最终要写入到外部数据库的时候,或者说我们用这个连接器啊,要跟外部交互的时候,它必须要。
01:23
告诉flink,当前我的数据应该做什么样的处理转换对吧?啊,那所以其实是我们的连接器要跟外部系统去交换一些消息的,这个交换的消息类型它就是由所谓的更新模式来指定的,这里边要给大家介绍三种不同的更新模式,首先第一种最简单的就是所谓的追加模式pad模式。那大家前面看到那个,我们一开始把它转换成流的时候,用的也是to a pen string,然后后面我们看到这个CSV和卡普卡的这个table think啊,它里边实现的接口也是apad stream table think,那这个APA模式指的是什么呢?对,意思就是说这个表里边只做追加添加的插入操作,对吧,只有银色操作,所以它跟外部这个连接器啊,要发送这个消息的时候呢,就相当于在我当前这个模式下就只发一种消息。
02:25
或者说这个这个消息也就不用再指明类型了,对吧,只有一种消息嘛,也就是说我就是不停的给你发数据,然后呢,没别的,好好呃想呃好好考虑的啊,直接就在后边追加,把这个数据加上去就完事了,这就是所谓的pad模式。那自然大家就想到,是不是所有的外部数据库、数据连接工具都应该能够支持这个ipad模式啊?你想吧,我既然是一个数据库,或者说数据能够允许他写入,那是不是我一定可以在后面追加,那这肯定是没有问题的,对吧?所以这是基本的一种模式啊,然后另外我们就考虑到了,那假如说我们数据库的操作,数据的操作,或者说这个数据表,对吧?我们现在不是table API吗?表的操作关系型表是不是除了追加插入之外还应该有,那就是我们说的这个c rud增删改查吗?查询这个不用说了,前面我们都已经考虑过了啊,现在主要要考虑的就是增删改对吧?除了增加insert这个最简单,那如果要有删除和修改的操作的话,接下来怎么办呢?
03:35
那么在颈追加模式下,因为它只能传递一种消息,那是不是就相当于搞不定这种这种事情了,对吧,我我现再发一条消息,我是要更新修改一条数据做不到了,那接下来我们就要用其他的模式,一种叫做撤回模式,Retra模式啊,之前我们说的啊,如果要转换成硫的话,是不是可以把这个经过聚合之后的那个table。
04:01
转换成一个tract stream啊,哎,这就相当于用了一个撤回模式,什么叫撤回模式呢?它表示的是我们向外部系统要去写入数据的时候呢,要传递两种消息。这两种消息,一种叫做添加ADD,另外一种消息叫做撤回retra。所以大家就会想到,如果这个时候我来了一条,假如说真的是这个插入这张表里面插入了一条数据的话,那我这个流里面应该传递一条什么消息出去。是不是就是来一条这个爱的消息就可以了啊,大家看这里边就涉及到一个概念,就是说我本来里边定义的是一张表的操作,对吧?哎,增删改查,那现在呢,我是是不是每来一条数据之后,我就要做一次操作,最后是我要得到一个结果啊,所以我们最终还是一个流式的处理,所以这就涉及到我一张表发生了一个变化之后,那么反映在我最后的流处理的输出上,到底应该怎么样的呢?
05:00
啊,对吧,这个输出它可以告诉外部系统,比方说你跟卡普卡连接啊,你跟redis跟MYSQL连接,可以告诉他你去做增删改查什么样的操作。那所以这里边retra模式下,就是如果是插入,那我就传一条I的消息,这就是插入嘛,非常简单,那如果要是删除呢。删除当然就是撤回嘛,Retra对吧,发一条retra消息就可以,那如果要是更改呢。如果是更新操作update的话,它会直接把这个操作编码成两条消息,也就是我们看到的一条数据进来之后,我后边是不是对应的应该有两条数据输出啊,对吧?这两条消息就是上一条数据的旧数据的撤回删除和下一条新数据的插入,所以大家回忆一下之前那个RA stream是不是有一个false有一个处啊。他就分别表示这两条消息对吧?啊,这就是所谓的撤回模式。
06:01
那除了撤回模式之外,另外还有一种模式叫做更新插入模式,就是所谓的这个up模式啊,那大家想一下,这个up模式又是什么意思呢?Up其实是个合成词,它就是update加insert,对,所以这个呃,更新插入模式里边,Up模式下边它所有的这个消息呢,也都。呃,就是它是编译,也也是编码成两种消息,一种消息就直接叫做absur,另外一种消息叫delete,所以顾名思义,大家会想到,如果要是删除的话,表里边做了一条删除操作,那是不是就是delete呀?发一个delete就行了,那如果要是插入呢?啊,大家看,不管是插入还是更新,它都是发送一条UPS就完事了。那这就会有问题了,那我们外边的这个数据库,我怎么知道你当前是要追加插入一条还是要更新一条呢?哦,所以大家会发现在更新插入模式下就必须要。
07:04
额外指定当前的K,大家想,如果说我知道当前的K是什么的话,那是不是相当于我接下来这就是一个k value的操作了,对吧,类似于哈希map的操作了,就是你如果来了一条数据,它的K如果已经存在的话,那我是不是就是更新啊,更新它的value就完了嘛,如果要是这个K不存在的话,那我就插入,对,就是把这个做一个插入就完了。好,那大家看它的这个更新插入模式,它的比较好的一点优势,优点在于。它的这个编码方式是不是就非常简洁呀,对吧,你这里边我re的模式下边如果要做一条更新的话,得发两条消息,而我现在是不是只要一条消息就搞定了啊,就是有一些数据库,如果我们支持这个K的话,那这里边就非常的简单对吧?直接做这个更新插入就完事了,这就是所谓的更新模式。
我来说两句