1.复杂事件处理
大数据应用领域存在业务逻辑非常复杂的应用系统,比如,一个应用要检测特定顺序先后发生的一组事件,对事件组进行分析或报警提示,若使用SQL 或者DataStream API 处理这类应用,过程相对来说比较复杂。例如,针对用户登录的应用场景,需要检测用户连续登录失败事件的发生。一次登录失败可以定义为一个事件,两次登录失败就可以定义为两个事件的组合。电商系统需要检测用户"下订单和支付"的行为,这也可以定义为组合事件,即"下订单"和"支付"两个事件的组合,这两个事件之间存在着时间先后的关系,"下订单"事件在"支付"事件之前完成,电商应用系统可能还会约定"下订单"事件和"支付"事件的时间限制,也就是说,如果"下订单"后超过了约定的时间没有"支付","支付"就失效了。类似这样多个事件的组合称为"复杂事件"。对于复杂事件的处理,由于涉及事件的严格顺序,有时还有时间约束,很难直接用FlinkSQL 或者DataStream API 来完成,即使使用这些API 可以实现复杂事件的处理,实现的复杂度也会非常高,程序的可维护性也相对比较差。对于这类复杂事件的处理,Flink 提供了专门用于处理复杂事件的库CEP,通过使用CEP 提供的API 进行开发,可以比较容易地解决这类问题。
2.CEP 简介
Flink CEP 是Flink 提供的用于处理复杂事件的库。CEP 是针对流处理而言的,分析的是低延迟、频繁产生的事件流,主要目的是在无界流中检测特定的数据组合,以便进行后续处理。"复杂事件处理"可以在事件流中检测到特定的事件组合并进行处理,例如,"连续登录失败"或者"订单支付超时"这样的事件组合。处理过程是把事件流中的一个个简单事件,通过一定的规则匹配组合起来,构成"复杂事件",然后基于这些满足规则的一组组复杂事件进行转换处理,得到结果并输出。复杂事件处理的流程可以分成如下3 个步骤。
(1)定义复杂事件的一个匹配规则。
(2)将匹配规则应用到事件流上,检测满足规则的复杂事件。
(3)对检测到的复杂事件进行处理,得到结果并输出。
图 7-1 展示了复杂事件处理的示意图。输入的事件流是不同的几何形状,如圆形、矩形和三角形。然后定义匹配规则"在圆形后面紧跟着三角形",现在将这个规则应用到输入的事件流上,就可以检测到3 组匹配的复杂事件,它们构成了一个新的"复杂事件流",事件流中的数据就变成了一组一组的复杂事件,每个事件组合都包含了一个圆形和一个三角形。接下来就可以针对检测到的复杂事件进行后续处理,例如,输出一个提示信息或者报警信息。
3.模式
基于Flink CEP 开发程序的第一步是定义事件的匹配规则,这个匹配规则叫作"模式"(Pattern)。模式主要包括如下两部分内容。
● 简单事件的特征。例如,以上提到的不同形状的几何图形,不同的形状就是不同的特性。
● 简单事件之间的组合关系。事件之间的组合关系主要是指"近邻关系",也就是说,一个事件跟着另一个事件出现的情况是否存在。"近邻关系"可以定义为严格的近邻关系,也可以定义为宽松的近邻关系。严格的近邻关系是指两个事件之间不存在任何其他事件,非严格的宽松的近邻关系是指两个事件之间允许存在其他事件,两个事件只需前后顺序正确就可以。除了近邻关系以外,还可以扩展模式的功能,例如,匹配检测的时间限制;每个简单事件是否可以重复出现;对于事件可重复出现的模式,遇到一个匹配模式后是否跳过后面的匹
4.Flink CEP 应用场景
Flink CEP 主要用于实时流数据的分析处理。Flink CEP 可以帮助在复杂的事件流中找出那些有意义的事件组合,进而近实时地分析判断、输出信息或报警。Flink CEP 在企业项目的风控控制、用户画像和运维监控中都有非常重要的应用。
● 风险控制:设定行为模式对用户的异常行为进行实时监测。当用户行为符合异常行为模式,例如短时间内频繁登录失败、在电商网站大量下订单却不支付,就可以向用户发送报警提示,可以有效地控制用户和平台的风险。
● 用户画像:利用预先定义好的模式,对用户的行为轨迹进行实时跟踪,从而检测出具有特定行为习惯的用户,画出相应的用户画像。基于用户画像可以进行精准营销,即向行为匹配预定义规则的用户实时发送相应的营销推广。
● 运维监控:对于企业服务的运维管理,可以利用CEP 灵活配置多指标、多依赖来实现更复杂的监控模式。