ITPub博客

首页 > 数据库 > 数据库开发技术 > Flink CEP 基本概念及使用规则

Flink CEP 基本概念及使用规则

原创 数据库开发技术 作者:3分钟秒懂大数据 时间:2021-06-24 19:25:45 0 删除 编辑

关注并标星 3分钟秒懂大数据

每天1次,打卡阅读

更快更全面获取大数据技术博客


1、什么是CEP

CEP的概念:

        Ø复杂事件处理(Complex Event Processing),用于识别输入流中符合指定规则的事件,并按照指定方式输出。
        Ø起床—>洗漱—>吃饭—>上班一系列串联起来的事件流形成的模式
        Ø浏览商品—>加入购物车—>创建订单—>支付完成—>发货—>收货事件流形成的模式。
通过概念可以了解,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分钟秒懂大数据;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2021-06-15

  • 博文量
    98
  • 访问量
    42101