你好,欢迎来到第 37 课时,本课时我们主要讲解“自定义 Pattern 和报警规则”。
在上一课时提过,PatternStream 是 Flink CEP 对模式匹配后流的抽象和定义,它把 DataStream 和 Pattern 组合到一起,并且基于 PatternStream 提供了一系列的方法,比如 select、process 等。
Flink CEP 的核心在于模式匹配,对于不同模式匹配特性的支持,往往决定相应的 CEP 框架是否能够得到广泛应用。那么 Flink CEP 对模式提供了哪些支持呢?
Pattern 分类
Flink CEP 提供了 Pattern API 用于对输入流数据进行复杂事件规则的定义,用来提取符合规则的事件序列。
Flink 中的 Pattern 分为单个模式、组合模式、模式组 3 类。
单个模式
复杂规则中的每一个单独的模式定义,就是个体模式。我们既可以定义一个给定事件出现的次数(量词),也可以定义一个条件来决定一个进来的事件是否被接受进入这个模式(条件)。
例如,我们对一个命名为 start 的模式,可以定义如下量词:
// 期望出现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次,并且尽可能地重复次数多
sta