00:00
再来给大家在理论上重新介绍一下CP到底是什么?呃,那首先我们说一下cep的概念,什么是CP呢?它其实是一个缩写啊,就是complex event c processing的缩写,首字母就是cep,所以翻译过来的话就是叫复杂事件处理对吧?啊,那所以我们用到的这个CP呢?我们平常所说的这个CP,大家看在开发环境里边我们要导入一个依赖啊,那所用的这个flink cp其实就是在flink里边实现的复杂事件处理的一个库,所以它其实是比较高层的,比较高级的这个API基本上大家可以理解成和flink CQ是一个层级的啊,它是比这个data three API啊,是要更高一个层级,那么它主要用来干什么呢?当然顾名思义就是处理复杂事件嘛,所以它的主要原理就是用CP,它是允许我们在无休止的事件流里边检测一些符合特定模式的复杂事件,所以大家会看到我们在代码里边首先是定义那个模式,定义pattern,对吧?
01:09
它的目的就是让我们有机会能够抓住掌握到数据里边最重要的部分,什么叫最重要的部分,就是前后不同的数据发生之后啊,他们之间应该是有关联的,对吧?有时候我们想考虑的这个数据呢,不是单个的来一个数据考虑一次,而是要考虑到他们先后的顺序,先后的关联啊,所以这个就叫做复杂事件了啊,大家看什么叫复杂事件,给一个定义,就是叫一个或多个由简单事事件构成的事件流。然后我们再通过一定的规则做一个匹配,这样的话,这就是一个复杂事件。然后我们可以把它检测到,然后就可以输出做一个转换,输出得到用户想要的数据了啊,这就是满足规则的一个复杂事件处理的过程。这个概念可能还是有点枯燥啊,大家可以看一下,看一下这张图。
02:04
这张图就会看得比较清晰,我们看这里面的输入。上下是有两个,看起来是两条流是吧?哎,那大家可以把它理解理理解成一个这个KPI之后分组的一个流的状态,这里边大家看到本身每一个小图形就代表了一个输入的事件,然后大家看到这个事件特点就呃有所不同啊,有三角,有圆圈,有这个长方形,那我们现在想要提取里边的什么样的复杂事件呢?我想要提取的是前边有一个圆圈,后边紧跟着来了一个长方形,这样的事件,这样的复杂事件,大家想这就相当于是一个事件组合了,对吧?哎,所以我这里边就相当于定义了一个规则,这个规则就是前面是圆圈,后边紧跟着来长方形。那大家想我这个输入流是这样的,如果应用了这个规则之后,能够捡取出来什么样的一个输出结果呢?
03:05
大家看拣拣选出来的是不是就是我找这个前面的数据啊,啊,前面圆圈后边诶这是三角不是长方形,这个都不符合对吧,一个我们的这个数据流向是这样的啊,这一个一个往过流,那么这里边大家看到到这儿这是不是对应的这个前面有圆圈,后边有有长方形,这就是符合匹配的一个复杂事件啊,所以我们要把它框在一起,是不是直接就得到这个输出了。同样如果是KY的话,下边这里边我们找是不是也是前面有圆圈啊,这后面是圆圈,这个不符合,但是接下来的这个圆圈后边有长方形,这个符合对吧?哎,那大家看还有这个,那你说如果要这样的话,前面有圆圈隔了几个之后,后边有长方形,这个符合吗?这就看我们定义规则了,如果我们规则要求是后边紧跟着必须是长方形的话,这是这就不符合对吧?哎,那如果你规定是不一定要几根隔几个也行啊,那其实这个也可以算是符合要求的,对吧,他可以等一会儿嘛,啊所以大家看到我们输出得到的匹配的事件,其实就是这样的一个效果。
04:14
那我们根据这个图来总结一下的话,我们现在要做的目标就是什么呢?啊,就是从有序的这个事件流里边,想要提取出发现一些高阶的特性,比方说圆圈后边有长方形,对吧,紧跟着长方形,我们就是要提炼这样的特殊的事件。大家想,所以就是CP为什么特别的负,特别的适合应用在这个风控做这个监控类指标的一个统计里边,大家想是不是监控类指标就应该是前面发生什么,后面发生什么,哎,这是一种特殊的情况,我要把它拣选出来报警啊,诶所以你看它就是定义这样的规则,就可以把它提取出来。啊,这是目的,然后我们看到它的输入,那就是一个或多个简单事件构成事件流对吧?啊,这是大家比较熟悉的这个数据流的状态,我们这里边是管它都叫做事件流了,然后接下来处理的过程呢,就是要定义一个规则啊,就是要用这个规则应用到这个数据流里边,就可以识别这先后发生的简单事件之间的联系,然后接下来这个符合一定规则的,符合先后发生顺序的啊,前面是圆圈,后边是长方形的,呃,那么这就构成了一个复杂事件。
05:27
然后我们应用这个规则之后,想要得到的输出,那就是满足我们这样规则的,诶这样的一个复杂事件的输出,对吧?所以大家看这就相当于这是不是有点像一个特殊的filter啊。对吧,有也是有点像一个filter一样,应用这个规则之后,就相当于把里边符合规则的复杂事件过滤出来了,只不过我们得到的呢,这不是一个一个的事件了,现在是不是应该是一组一组的复杂事件啊,啊,这就是CP的这个特点啊,处理的过程就是这样。
06:00
然后接下来我们给大家讲一讲这个它核心里边核心的一个概念,就是所谓的模式啊,那大家知道在。处理复杂事件的里边,我们定义的那个规则在cep里边是叫做patent啊,所以这就是我们所所谓的这个呃模式啊,那么在CP调用的过程当中呢,整套API都是基于CP里边的这个pattern方法去做的,所以说我们就管它叫做pattern API就是一个模式API。所以大家看一下这个判断API的整体的调用方式是什么,整体处理流程,这就是之前给大家总结出来的,首先我们应该有一个输入的数据流,对吧?大家看一个data stream event啊,得到一个input stream,然后接下来首先要做的就是定义一个pattern。大家看这个pattern长什么样呢?啊,就是调这个pattern点,然后首先是begin给一个名称,比方说我这儿叫start,大家看之前我那个叫first few对吧,这里面叫start啊,这个没关系,想叫什么给什么名就行了,一个字符串而已嘛,然后后面就是where给他的指定的那个选取条件,对吧?然后后边呢,可以next,然后大家看后面还可以指定当前事件的子类型,对吧,那就可我可以要求比方说我当前event,这是一个一个父类,父类型里边我可以要求当前的这个事件必须得是什么样的一个子类型。
07:25
大家想想这是不是也可以啊,对吧?可以做这样的一个类型判断啊,然后另外还可以有具体的一些条件判断,Where,那家看,除了这个连接词啊,除了这个next之外,还有followed by,那大家看followed by什么意思呢?Follow by就是跟在后边跟从对吧,那大家想跟在后边的话,它跟前面next相比。Next指的是下一个,那followed by是不是没说一定要下一个紧跟着,紧跟着呀,只要跟在后边就行了,对吧?哎,所以这个followed by这个连接的意思就是只要跟在后边发声就行,至于是不是紧跟着无所谓啊,所以它的这个条件就相当于放宽了,对吧?啊,然后同样啊,后边还有这个where对吧?啊,就是怎么样的一个条件,这合起来这就是一个pattern,就相当于是我们定义提取要去提取复杂事件的一个规则,对吧。
08:19
然后后面第二步就是把创建好的这个pattern应用到这个我们的输入事件流上,大家知道接下来这个应用得到这个pattern stream是不是就相当于把符合条件的那些数据就已经筛选出来了啊,就相当于做了一个过滤对吧?啊,就这里边已经是做了这样一个筛选了,但是大家想到你筛选出来之后,最后是不是还想对它做处理,得到一个比方说报警信息对吧?像我们的那个log warning那样的一个po类型,那所以我还要基于得到的这个复杂事件做一个转换操作,那这个转转换操作是不是就是接下来基于这个pattern stream做一个select或者Fla select操作就可以了啊,所以之前我们讲到的这个,呃,所有的处理流程啊,整体来讲就是这么三步。
09:07
这就是PAPI在代码里面的调用方式。
我来说两句