首页 > 数据库 > 数据库开发技术 > Flink CEP 基本概念及使用规则
关注并标星 3分钟秒懂大数据
每天1次,打卡阅读
更快更全面获取大数据技术博客



1、什么是CEP



CEP的概念:

CEP的使用场景:


像用户异常检测:我们指定异常操作事件为要输出的结果流;策略营销:指定符合要求的事件为结果流;运维监控:指定一定范围的指标为结果流;银行卡盗刷:指定同一时刻在两个地方被刷两次为异常结果流。



2、Flink CEP Pattern API



在Flink CEP API中,主要通过Pattern 类来进行实现。CEP模式主要分为三种模式:
1、个体模式
Ø单例模式:只接收一个事件
p 触发条件 (.where()/.or()/.until())
Ø循环模式:可以接收一个或多个事件
p单例 +量词(在个体模式后追加量词,指定循环次数)
个体模式分为单例模式和循环模式:
单例模式只接收一个事件,主要通过(.where()/.or()/.until())等条件触发,使用规则如下:start为定义的变量。

循环模式可以接收一个或多个事件,使用规则为 单例+量词,如下图所示:

2、组合模式(多个个体模式的组合)
Ø严格连续(next)
Ø中间没有任何不匹配的事件
Ø宽松连续(followBy)
Ø忽略匹配的事件之间的不匹配的事件
Ø不确定的宽松连续(followByAny)
Ø一个匹配的事件能够再次使用
组合模式主要分为三种使用规则:但是在使用组合模式之前,必须以初始模式开始,使用begin() 控制,如下图:

(1)严格连续,通过next()方法控制,这句话是指用户定义的基本事件,如最上图中的方块,必须是连续都是方块,不能出圆圈。可以通过下图理解。
![]()
(2)宽松连续,通过followBy()控制,中间可以有不匹配的事件
![]()
(3)不确定的宽松连续,通过followByAny()方法控制,表示一个匹配的事件可以多次被使用
![]()
组合模式还包含:“不希望出现某种连续关系”:
.notNext()—— 不想让某个事件严格近邻前一个事件发生
.notFollowedBy()——不想让某个事件在两个事件之间发生
组合模式注意事项:
所有组合模式必须以.begin()开始;组合模式不能以.notFollowedBy()结束;"not"类型的模式不能被optional所修饰;此外,还可以为模式指定时间约束,用来要求在多长时间内匹配有效。
3、模式组
Ø一个组合模式作为条件嵌套在个体模式里pPattern((ab)c)



3、Flink CEP 案例



为例帮助大家更好的理解CEP的API使用,接下里通过两个案例,对CEP的使用进行讲解。
(a)电商案例——条件创建订单之后15分钟之内一定要付款,否则取消订单
案例介绍:在电商系统当中,经常会发现有些订单下单之后没有支付,就会有一个倒计时的时间值,提示你在15分钟内完成支付,如果没有完成支付,那么该订单就会被取消,主要是因为拍下订单就会减库存,但是如果一直没有支付,那么就会造成库存没有了,后面购买的时候买不到。
在CEP概念介绍时,引入过一条链路:
Ø浏览商品—>加入购物车—>创建订单—>支付完成—>发货—>收货事件流形成的模式。
上述模式是标准的电商事件流,我们案例中定义的CEP规则是 创建订单—>支付完成 这两个环节,要求是,判断15分钟内是否付款,否则订单取消。
代码设计:
Ø(1)定义实体类:订单编号,订单状态(1 创建订单,等待支付,2支付订单完成,3取消订单,申请退款,4已发货,5确认收货,已经完成)订单创建时间,订单金额

Ø(2)创建运行环境,设置流时间特性为事件时间,设置并行度

Ø(3)设置Source源

Ø(4)定义Pattern模式,指定条件

在Pattern模式中,我们使用到了个体模式,组合模式
首先,使用begin()方法以模式作为开始;
其次,由于创建的CEP规则是 创建订单—>支付完成 ,则在单例模式下,通过where条 件触发订单的状态已将处于 1 创建订单,等待支付状态
接着,通过宽松连续followBy()方法忽略15分钟内的产生的其他订单,所以使用宽松连续。
然后,通过where条件触发订单的状态是否已将处于 2 支付完成。
最后,通过within()方法判断第二次触发的订单是否在支付的15分钟内完成。
Ø(5)订单超时检测

Ø(6)运行结果对比

查看最终的运行结果,可以得知201608041140.... 这个订单的状态为1,且没有其他状态,最终被系统判断为超时订单。
(b)系统登录案例——当2秒内出现两次登录失败(“fail”)时,输出异常报警信息
同样,根据上述信息,我们做以下代码设计:
Ø(1)设置实体类:用户ID,登录IP,事件类型,事件时间

Ø(2)设置环境,指定source源,传入实体类

Ø(3)定义pattern匹配模式(规则),指定条件
begin: 第一次;where: 出现 fail;next: 紧接着第二次出现 fail;times: 出现一次 ;within:表示在2秒内。

Ø(4)结果对比


查看最终的运行结果,可以得知服务器编号为1,连续2秒在两个服务器登录,登录失败;服务器编号为3,连续2秒在一台服务器登录,登录失败!
以上就是CEP的讲解内容!觉得好的,点赞,在看,分享三连击,谢谢!!!

End
找各类大数据技术文章和面经,就来
<3分钟秒懂大数据>
随时更新互联网大数据组件内容
专为学习者提供技术博文
快和身边的小伙伴一起关注我们吧!

作者简介:逆流而上Mr李,秋招7offer,CSDN博客:https://blog.csdn.net/weixin_38201936
原文作者:3分钟秒懂大数据;如有侵权,请联系管理员删除。