CEP匹配模式示例解释Pattern.begin[LoginEvent](“begin“).where......

以下代码作为示例,详细CEP

Pattern.begin[LoginEvent]("begin").where(_.eventType == "fail")
      .next("next").where(_.eventType == "fail")
      .within(Time.seconds(3))

首先需要了解一些概念

Pattern分为个体模式、组合模式、模式组


个体模式

组成复杂规则的每一个单独的模式定义
e.g.

start.times(3).where(_.behavior.startsWith("fav"))
times(3)含义:匹配出现3次,times为个体模式量词
where(_.behavior.startsWith("fav")):where 为个体模式条件,匹配behavior开头为"fav"

组合模式

也叫模式序列
很多个体模式组合起来,就形成了整个的模式序列
模式序列必须以一个"初始模式"开始:

val start = Pattern.begin("start")

模式组

将一个模式序列作为条件嵌套在个体模式里,成为一组模式


个体模式中的量词、条件

量词

量词决定个体模式是单例模式还是循环模式,单例模式只接收一个事件,而循环模式可以接收多个
CEP匹配模式示例解释Pattern.begin[LoginEvent](“begin“).where......_第1张图片

条件

每个模式都需要指定触发条件
CEP中主要通过 .where() .or() .until()指定条件
调用方式有四种:简单、组合、终止、迭代

组合模式(模式序列)不同近邻模式

严格近邻

CEP匹配模式示例解释Pattern.begin[LoginEvent](“begin“).where......_第2张图片
口 followedBy ⚪

宽松近邻

CEP匹配模式示例解释Pattern.begin[LoginEvent](“begin“).where......_第3张图片
口 next ☆

非确定性宽松近邻

a followedByAny b

此外模式指定时间约束,用来要求在多长时间内匹配有效
next.within(Time.seconds(10))


综上,示例Pattern.begin[LoginEvent]("begin").where(_.eventType == "fail") .next("next").where(_.eventType == "fail") .within(Time.seconds(3))
含义为以LoginEvent类型数据作为匹配初始模式,判断3秒内,两个类型_.eventType为fail,严格近邻两次的数据

你可能感兴趣的:(Flink)