00:01
通过前面章节的学习,我们已经了解了flink各个层级API的使用。核心层当然就是我们前面介绍过的date stream API了,第五章我们主要是介绍基础的一些用法,比如说啊,原算子,输出的SK算子,中间的基本转换算子,还有聚合算子等等等等,那基于这些后面我们还介绍了flink当中窗口API的调用,这也属于API,后面呢,我们还介绍了。多流转换相关API的调用方式啊,那除了这些之外,Data核层process啊,在process function当中,我们可以非常灵活的使用当前定义的状态,以及定义一些定时器,可以对时间进行更加精细化的操作和处理。那另外呢,我们还介绍了更高层级的API,就是table API和flinkq,那现在到目前为止,我们可以说已经掌握了flink当中各种各样的编程方式编程的API。
01:11
那么在实际应用过程当中,我们就可以根据需求去灵活调用了。那么在一般的应用场景当中,我们主要使用的是哪种API呢?呃,其实我们知道在大数据分析领域啊,一大类需求主要就是进行计算的,比如说像PV,那我们其实就是要统计一下当前的个一个count值嘛,那或者呢,其他一些基本的需求,就是比方说要统计本月度的额啊,或者是。平均的成本等等等等这个商业上的一些基本的指标,所有的这些指标我们会发现主要就是要么就是count,要么就是萨,或者是做求一个平均数,或者是最大最小,主要就是一些聚合函数的调用,所以我们会发现直接使用flink CQ去写一个聚合查,其实就是最简单的实现方式,当然了,往往在实际应用的过程当中,我们还要窗口,所以往往就是一个窗口聚合的过程,使用flinkq就是最容易实现,因为在Q当中给我们提供了大量的系统内置函数,不管是什么样的需求,往往都可以直接调用系统函数直接搞定。
02:27
啊,那有一些业务逻辑呢,可能就会相对复杂一点,CQ里面可能没有相应的内置函数,那怎么办呢?呃,我们可以调用API,使用核心层的API,可以灵活的使用状态编程,自定义一些状态,然后就可以设置各种各样的条件判断条件跳转,这样的话就可以实现更加复杂的。啊,那如果说还有更加复杂的场景怎么办呢?呃,比如说在实际应用的过程当中,有一类需求,它是要让我们在整个到来的这个数据流里边,以特定的顺序检测到一些连续的事件,那这些事件组合起来,就代表有可能我们现在出现了一场,或者代表当前发生了一个比较重要的事件事情,啊,那这个时候呢,我们可能就要进行特别的统计计算,或者是做一个报警提示了。
03:28
那如果说我们想要用datapi来实现这样的功能的话,可能在逻辑上就会非常的绕,可能我们要嵌套好几层,那另外呢,还有一些场景,可能当前因为有特定的顺序嘛,我们可能还需要去考虑当前每一个事件发生的时间。啊,那比如说我们举一个具体的例子,在网站当中我们知道都需要做用户管理啊,那用户是使用用户名和密码进行登录的,那如果说一个用户他在一段时间内连续的登录失败的话。
04:06
那我们就会这个用户当前的状态有所怀疑啊,他有可能是被暴力攻击了这个账号,可能会有一些安全风险,所以在这个时候呢,我们如果检测到了用户连续的登陆失败事件,这个时候就应该要做一个报警提示了。那或者呢,在电商网站里边非常的频繁的一个事件,就是用户要去下单和支付,诶那我们可能是用户先要下单,然后在一定的时间段内,时间范围内就应该要有一个支付的行为,这两个行为也是要组合一起,组合在一起来进行判判断的。那在这个判断的过程当中呢,它就一定是有先有后,而我们知道在分布式的流处理过程当中,所有的事件未必是按照本身他们发生的时间点先后到来的,哎,那有可能本来应该是先发生的事件到后来才来了,那我们怎么样能把它判断出来呢?如果我们直接使用。
05:13
PI,那那做这个状态编程的话,那就不光在这里边,我们需要有大量的状态去进行判断,可能还得。对他的时间戳进行特别的判断和。然后对当前它发生的先后顺序进行一个调整啊,有可能还需要做一个排序,这个过程可能就非常的复杂,非常的麻烦。类似这样的一个需求,就对对于这种啊,比方说连续登陆的失败,那我们可以看成前面有一个登陆失败事件,接下来又来了一个登录失败事件啊,中间还不能有登录成功的事件啊,它是连续的登录失败,那或者像这个下单之后支付,那我们可以看作前面来了一个下单行为,然后在他之后来了一个支付行为。
06:04
所以我们可以看到啊,现在要考察的就不是简单的某一个事件了,而是一系列多个事件的一个组合。这种场景,我们把这些事件的组合叫做复杂事件。啊,那如果说对于这个复杂事件的处理,它仅仅涉及到这个事件的特征和顺序的话,可能还简单一点,那有时候呢,我们可能还有时间约束,就是比方说像这个下单之付行为,可能我们要求下单之后多长时间范围内,这个支付就要到来,呃,如果要是超过这个时间,可能就超时了。如果有这么多复杂的限制的话,如果我们想要实现,那可能就只能用最底层的process function来处理,因为你涉及到这个时间上的限制,那有可能还要注册定时器嘛。
07:00
那自然能够想到处理函数,尽管能够搞定一切,这是我们的大招。但是。太复杂了啊,底层可能我们自己要去控制的东西太多,想要注册的定时器状态,整个的业务逻辑就会可读性,代码的可读性就会非常的差,那怎么样去解决这个问题呢?Flink为我们提供了一个专门用于处理这种场景的库,就叫做cep啊。那所以CP到底是什么呢?我们首先来看一下基本的概念,所谓的CP。它明显是一个英文缩写。本身它代表的含义是complex。Event processing,也就是复杂事件处理。它就是专门flink里边用来。处理复杂事件的这样的一个库啊,所以它的API的层级啊,应用层级其实是非常高的,是在最顶层的这种应用层级去进行调用的,可以认为CP和flink CQ是一个层级的API。
08:06
那它其实就是专门用于复杂事件处理,那到底什么叫复杂事件处理呢?啊,那首先就是我们要理解复杂事件,前面说到了复杂事件其实就是一系列。按照顺序特定顺序排列的事件的组合啊,那所以我们在事件流里边呢,就可以定义这样的特定的一个规则来指定顺序,按照事件不同的事件啊,按照什么样的顺序,按照什么样的组合方式。把它们组合在一起,然后呢,我们在时间流里边把它检测出来,然后把它们统一进行处理。啊,那这样的一个组合方式,有可能是比方说连续登陆失败啊,那也有可能是订单。下单之后要进行支付啊,那一段时间如果不支付就会超时啊,那所以这样的一些需求都属于复杂事件处理。
09:03
那总结起来的话,所谓的C复杂事件处理流程,整体来讲就是三个步骤。我们可以看到这个图上,首先我们应该要定义一个匹配的规则,也就是这里所说的模式,CP里边把这种匹配的规则叫做模式。那这里我们定义的这个是一个什么模式呢?就是前边来了一个。圆形的事件啊,这是事件的一个特征啊,它是圆形的,后边紧跟着就是一个三角形的事件,我们要检测的就是连续到来的这样的两个事件,这就是一个我们想要去考察的复杂事件。哎,那接下来呢,就把这个模式,或者说这个匹配规则直接应用到当前的输入事件流里边来。那么输入事件流里边来,我们就可以检测到对应的复杂事件的组合了啊,那我们可以看到这里有一组前面是圈,后面是三角啊,后面还有一个前面是圈,后面是三角啊,那下面这还有一个前面是圈,后面是三角。
10:11
啊,那我们看到当前这个模式的定义呢,是圆圈后面紧跟着三角,所以像这个圆圈。隔一个之后的三角,它俩就不属于匹配上的复杂事件了。那这样我们检测到这些符满足规则的啊,符合规则的复杂事件之后,接下来怎么办呢?哎,那可以把它们单独的提取出来,那相当于这就成了另外的一个流了,相当于过滤出来的一个单独的流,我们可以把它叫做复杂事件流。那么这个流里边的每一个我们想要处理的对象,相当于是。两个事件合在一起的一个复杂事件,那接下来我们就可以针对每一组复杂事件进行处理转换。然后进行计算,得到的结果就可以输出了啊,那比如说我们如果是一个检测连续登录失败的话,把当前的一组连续登陆失败事件检测到,那可以直接输出一个,相当于输出一个报警信息啊,就是提示一下当前到底发生了什么样的状况。
11:16
是否要进行人工的干预啊?这是一个非常常见的应用场景。所以我们会发现CP复杂事件处理主要就是用来分析这种低延迟的大量数据到来之后的事件流,然后主要是要检测出整个这个数据流里边特定的一些事件的组合,诶这样的话我们就可以有机会掌握这个数据流里边比较重要的那些信息了。那这里面的涉及到一个重要的概念,就是模式这个pattern,那这里面的这个pattern到底包含哪些内容呢?这里我们可以单独的先做一个解释。
12:00
这个pattern里边主要有两部分内容,一个就是每个简单事件的特征,诶所谓的这个简单事件当然是跟复杂事件对应的一个概念,就是我们本身这个数据流里边每一个数据其实就是一个事件,这一个事件我们就可以把它叫做简单事件,它是单独的。所以这里面我们首先要对每个筛选出来的单独事件,它的特征做一个定义。比如说在我们这里,第一个简单事件要求它必须是圆啊,那第二个简单事件要求它必须是三角,这就是单独简单事件的特征。其次呢,我们还应该定义。不同的简单事件之间,他们先后发生的关系是什么样的?他们之间的组合的特性是什么样?那比如说在这里呢,我们要求是前面是圆,后面是三角,而且它们中间不能有其他事件插入。
13:00
啊,所以这里边我们就相当于他俩是一个紧挨着前后发生的这样的一个状态。啊,那除了这样的一个特征之外,我们还可以定义,比如说。检测的时间限制,那就是在多长时间范围内,这个事件先后出现,这样的话就符合我们的匹配规则,超时的话那就不符合了,那另外呢,我们还可以针对每一个简单事件去定义它是否可以重复出现。啊,那另外呢,还可以针对就是对于这种重复出现的模式呢,假如遇到一个匹配之后,是否要跳过后面的匹配等等等等,这里有各种各样模式的定义。CP本身所做的事情,其实本质上来讲就是做了一个模式匹配,针对我们当前的这个数据流、事件流做了一个模式匹配啊,那的CP这个库呢,本身就是为我们提供了各种各样用来处理这个模式的API啊,所以最核心的这套API就叫做pattern API模式API,那关于这一部分内容呢,我们会在后边的章节里边再做具体的讲解。
14:11
那有了这些基本的概念,最后我们再来介绍一下。CP的一些主要的应用场景啊,那其实我们知道CP主要就是来分析这个数据里边的。高阶的特特征的啊,主要是提取这些复杂事件,他们。某种规律符合某种模式的这样的一系列事件。那么在实际项目当中,CP可以用在哪些场景里边呢?呃,我们可以看到这里列出了三个CP应用的典型场景,首先就是风险控制,风控啊,那因为我们知道只要设定了一些行为模式,很很显然我们就可以针对一些特定的行为进行检测啊,那这样的话我们就可以。监控到用户的异常行为啊,那当一个用户的行为它符合了我们定义的那些异常的模式的话,比如说短时间内。
15:10
频繁的登录而且失败啊,那或者呢,就是大量的下单却不支付,那这相当于这是在做刷单嘛,那如果我们检测到这些异常行为的时候,我们就可以进行一个报警提示啊,那或者呢,就是直接向用户发送这个短信消息,这些都是可以做的啊,那这样的话就可以有效的控制平台和用户账户的风险。除此之外呢,呃,风险控制应该可以说是CP应用最为广泛的一个用途,那另外还有一个非常有用的场景,那就是可以用来做用户画像,因为我们知道不光用户可以有一系列的异常行为的组合,也可以有正常行为的组合呀,那用户正常行为的一系列的组合往往就代表了用户的一些行为习惯啊,那所以我们就知道了,能够对用户的行为轨迹进行一个实时的跟踪检测的话,可以检测出他的行为习惯,当然就可以做出相应的用户画像。
16:12
我们知道基于用户画像可以做很多事情啊,最直观的就是可以进行精准营销啊,精准的推荐,那这样的话就是符合某种行为模式的用户,他就是属于诶给他贴一个标签,它属于哪一类用户,这种用户就可以对应的给他进行什么样的营销手段的应用可以。给他进行特别的推荐,所以现在很多企业里面,包括现在主要应用在这个电商企业,还有这个做短视频的企业啊,所做的这些精准推荐,主要就是这样的一个原理,也就是基于用户画像。所以其实非常的有用啊。那另外还有一个应用场景就是运维监控了,我们知道对于企业服务的运维管理呢,往往我们可能都是手动去定义一些规则的,诶,所以cep它不就可以管理这些规则定义成模式吗?诶,所以利用CP是可以灵活的去配置各种各样的指标,各种各样的依赖关系的,可以实现非常复杂的监控模式。
17:19
这就是关于CP的基本概念和它的应用。
我来说两句