1、概念
- Flink CEP(Complex Event Processing)是在Flink上层实现的复杂事件处理库
- 将数据流通过一定的规则匹配,然后输出用户想得到的数据,
-底层通过equals()和hashCode()方法来比较和匹配事件
2、使用场景
风控检测
对用户异常行为模式、数据异常流向实时检测
策略营销
向特定行为的用户进行实时的精准营销
运维监控
监控设备运行参数,灵活配置多指标的发生规则
2、模式(Pattern)
模式的概念
处理事件的规则,被叫做“模式”(Pattern)
模式的使用
val input: DataStream[Event] = ...
// 1.定义一个Pattern
val pattern = Pattern.begin[Event]("start").where(_.getId == 4).next("middle").subtype(classOf[SubEvent])...
// 2.将事件流与Pattern进行匹配
val patternStream = CEP.pattern(input, pattern)
// 3.得到处理结果
val result: DataStream[Alert] = patternStream.process(...)
2、模式的分类
单个模式(Individual Patterns)
单个模式的分类
单例(singleton)模式
循环(looping)模式
可以在单个模式后追加量词,指定循环次数
量词
pattern.oneOrMore()一次或多次
pattern.times(#ofTimes)固定次数
pattern.times(#fromTimes, #toTimes)范围次数
pattern.greedy()贪心
pattern.optional()可选
量词的使用
// 期望出现 4 次
start.times(4)
// 期望出现 0 或者 4 次
start.times(4).optional()
// 期望出现 2、3 或者 4 次
start.times(2, 4)
// 期望出现 2、3 或者 4 次,并且尽可能的重复次数多
start.times(2, 4).greedy()
// 期望出现 0、2、3 或者 4 次
start.times(2, 4).optional()
// 期望出现 0、2、3 或者 4 次,并且尽可能的重复次数多
start.times(2, 4).optional().greedy()
// 期望出现 1 到多次
start.oneOrMore()
// 期望出现 1 到多次,并且尽可能的重复次数多
start.oneOrMore().greedy()
// 期望出现 0 到多次
start.oneOrMore().optional()
// 期望出现 0 到多次,并且尽可能的重复次数多
start.oneOrMore().optional().greedy()
// 期望出现 2 到多次
start.timesOrMore(2)
// 期望出现 2 到多次,并且尽可能的重复次数多
start.timesOrMore(2).greedy()
// 期望出现 0、2 或多次
start.timesOrMore(2).optional()
// 期望出现 0、2 或多次,并且尽可能的重复次数多
start.timesOrMore(2).optional().greedy()
条件
每个模式都需要指定触发条件,作为模式是否接受事件进入的判断依据
通过调用 .where() .or() 和 .until() 来指定条件
条件的分类
简单条件(Simple Condition)
- 通过 .where() 方法对事件中的字段进行判断筛选
- 通过pattern.subtype(subClass)方法限制接受的子类型
组合条件(Combining Condition)
- or() 方法表示或逻辑相连,where 的直接组合就是AND
终止条件(Stop Condition)