Flink复杂事件(CEP)详解

一、定义

复杂事件处理(CEP)是一种基于流处理的技术,将系统数据看作不同类型的事件,通过分析事件之间的关系,建立不同的事件关系序列库,并利用过滤,关联,聚合等技术最终由简单事件产生高级事件,并通过模式匹配规则的方式对重要信息进行跟踪和分析。从实时数据中发掘有价值的信息。复杂事件处理主要应用于防范网络欺诈、设备故障检测、风险规避和智能营销等领域。

Flink基于DataStream API提供了FlinkCEP组件栈,专门用于复杂事件处理。

二、事件分类

1、简单事件

处理单一事件,事件的定义可以直接观察出来。处理过程中无须关注多个事件之间的关系,能够通过简单的数据处理手段将结果计算出来。

2、复杂事件

复杂事件处理不仅是单一事件,也处理由多个事件组成的复合事件。复杂事件处理检测分析事件流,当特定事件发生时来触发某些动作。

复杂事件中事件与事件之间包含多种类型关系,常见的有时序关系、聚合关系、层次关系、依赖关系和因果关系等。

三、Pattern API

Flink CEP中提供了Pattern API用于对输入流数据的复杂事件规则定义,并从事件流中抽取事件结果。

1、输入事件流的创建

2、Pattern的定义

2.1模式分类

(1)单次执行模式

一次只接受一个事件

(2)循环执行模式

接受一个或者多个事件

2.2设置循环次数

对于已经创建好的Pattern,可以指定循环次数,形成循环执行的Pattern

(1)times:指定固定的循环执行次数

(2)optional:通过Optional关键字指定要么不触发要么触发指定的次数

(3)greedy:贪婪模式,在pattern匹配成功的前提下会尽可能多的触发

(4)oneOrMore:指定触发一次或多次

(5)timesOrMore:指定触发固定次数以上

2.3定义条件

(1)简单条件

Simple Condition继承于Iterative Condition类,根据事件中的字段信息进行判断,决定是否接受事件

(2)组合条件

将简单条件合并,且关系使用And连接,或关系使用or连接

(3)终止条件

使用了oneOrMore或者oneOrMore().optional(),则必须指定终止条件,否则模式中的规则会一直循环下去。until()指定终止

2.4 模式序列

将相互独立的模式进行组合然后形成模式序列。各个模式之间通过邻近条件进行连接

(1)严格近邻(next)

所有事件都按照顺序满足模式条件,不允许忽略任意不满足的模式

例:“ a  next b”,事件序列【a,c,b1,b2】没有匹配

(2)宽松邻近(followedBy)

会忽略没有成功匹配的模式条件,没有严格邻近要求高,可以理解成or的逻辑

例:“a followedBy b”  事件序列:【a,c,b1,b2】匹配{a,b1}

(3)非确定宽松邻近(followedByAny)

可以忽略已经匹配的条件

例:"a followedByAny b" 事件序列:【a,c,b1,b2】匹配{a,b1},{a,b2}

(4)不希望出现某种邻近关系

notNext:不想让某一个事件严格近邻前一个事件发生

notFollowedBy:不想让某个事件在两个事件之间发生

(5)指定时间约束(within)

指定模式在多长时间内匹配有效

注意:

(1)通过指定循环次数将单次执行模式变成循环执行模式。

(2)每种模式能够将多个条件组合到同一事件上,条件组合使用where叠加,

(3)每个pattern通过begin定义

(4)Pattern.where()方法在pattern上指定Condition,只有当Condition满足之后,当前Pattern才会接受事件。

(5)模式序列不能以notFollowedBy结束

(6)Not类型的模式不能被optional修饰

3、Pattern应用在事件流上检测

patternStream=CEP.pattern(数据流,模式)

4、选取结果

FlinkCEP提供select和flatSelect两种方法从PatternStream提取事件结果

 

 

 

 

你可能感兴趣的:(研磨Flink)