Flink cep动态模板+cep规则动态修改实践

私信之前请一键三连,请给一点动力!谢谢

目录

Flink CEP 概念以及使用场景

1.什么是CEP?

2.Flink CEP 应用场景

3.Flink CEP 原理(只做简单了解)

规则条件遵循参考

简单规则:

相对复杂规则:

CEP支持的模式

个体模式

模式序列

groovy+aviator的介绍

groovy是什么?

Aviator是什么?

groovy+aviator+cep的整合使用

正常cep代码开发流程

cep动态模板

cep动态模板+动态规则修改

运行演示

集群运行效果

具体代码

相关代码

参考文章

最后


Flink CEP 概念以及使用场景

1.什么是CEP?

   CEP的意思是复杂事件处理,例如:起床-->洗漱-->吃饭-->上班等一系列串联起来的事件流形成的模式称为 CEP。如果发现某一次起床后没有刷牙洗脸亦或是吃饭就直接上班,就可以把这种非正常的事件流匹配出来进行分析,看看今天是不是起晚了。

     在真实场景中,起床,洗漱,吃饭,上班就是一个个事件数据。
CEP的特征如下:
      目标:从有序的简单事件流中发现一些高阶特征;
      输入:一个或多个简单事件构成的事件流;
      处理:识别简单事件之间的内在联系,多个符合一定规则的简单事件构成复杂事件;
      输出:满足规则的复杂事件。

下图中列出了几个例子,三个场景

  • 第一个是异常行为检测的例子:假设车辆维修的场景中,当一辆车出现故障时,这辆车会被送往维修点维修,然后被重新投放到市场运行。如果这辆车被投放到市场之后还未被使用就又被报障了,那么就有可能之前的维修是无效的。
  • 第二个是策略营销的例子:假设打车的场景中,用户在 APP 上规划了一个行程订单,如果这个行程在下单之后超过一定的时间还没有被司机接单的话,那么就需要将这个订单输出到下游做相关的策略调整。 
  • 第三个是运维监控的例子:通常运维会监控服务器的 CPU、网络 IO 等指标超过阈值时产生相应的告警。但是在实际使用中,后台服务的重启、网络抖动等情况都会造成瞬间的流量毛刺,对非关键链路可以忽略这些毛刺而只对频繁发生的异常进行告警以减少误报。

2.Flink CEP 应用场景

  • 风险控制对用户异常行为模式进行实时检测,当一个用户发生了不该发生的行为,判定这个用户是不是有违规操作的嫌疑。
  • 策略营销用预先定义好的规则对用户的行为轨迹进行实时跟踪,对行为轨迹匹配预定义规则的用户实时发送相应策略的推广。
  • 运维监控灵活配置多指标、多依赖来实现更复杂的监控模式。

3.Flink CEP 原理(只做简单了解)

  • Flink CEP内部是用NFA(非确定有限自动机)来实现的,由点和边组成的一个状态图,以一个初始状态作为起点,经过一系列的中间状态,达到终态。点分为起始状态、中间状态、最终状态三种,边分为 take、ignore、proceed 三种。 

  • take:必须存在一个条件判断,当到来的消息满足 take 边条件判断时,把这个消息放入结果集,将状态转移到下一状态。

  • ignore:当消息到来时,可以忽略这个消息,将状态自旋在当前不变,是一个自己到自己的状态转移。 

  • proceed:又叫做状态的空转移,当前状态可以不依赖于消息到来而直接转移到下一状态。举个例子,当用户购买商品时,如果购买前有一个咨询客服的行为,需要把咨询客服行为和购买行为两个消息一起放到结果集中向下游输出;如果购买前没有咨询客服的行为,只需把购买行为放到结果集中向下游输出就可以了。 也就是说,如果有咨询客服的行为,就存在咨询客服状态的上的消息保存,如果没有咨询客服的行为,就不存在咨询客服状态的上的消息保存,咨询客服状态是由一条 proceed 边和下游的购买状态相连。

下面以一个打车的例子来展示状态是如何流转的,规则见下图所示。

    以乘客制定行程作为开始,匹配乘客的下单事件,如果这个订单超时还没有被司机接单的话,就把行程事件和下单事件作为结果集往下游输出。

假如消息到来顺序为:行程-->其他-->下单-->其他。

状态流转如下:

1)开始时状态处于行程状态,即等待用户制定行程。 

2)当收到行程事件时,匹配行程状态的条件,把行程事件放到结果集中,通过 take 边将状态往下转移到下单状态。 

3)由于下单状态上有一条 ignore 边,所以可以忽略收到的其他事件,直到收到下单事件时将其匹配,放入结果集中,并且将当前状态往下转移到超时未接单状态。这时候结果集当中有两个事件:制定行程事件和下单事件。  

4)超时未接单状态时,如果来了一些其他事件,同样可以被 ignore 边忽略,直到超时事件的触发,将状态往下转移到最终状态,这时候整个模式匹配成功,最终将结果集中的制定行程事件和下单事件输出到下游。

上面是一个匹配成功的例子,如果是不成功的例子会怎么样?

假如当状态处于超时未接单状态时,收到了一个接单事件,那么就不符合超时未被接单的触发条件,此时整个模式匹配失败,之前放入结果集中的行程事件和下单事件会被清理。

规则条件遵循参考

简单规则:

同一天同一设备IP变更次数 大于 XX 次 

设备两次登录间隔小于 XX 秒

相对复杂规则:

同一账户,在XX分钟内转成金额 XX元后,又在XX分钟内转出累加金额大于 XXX元

CEP支持的模式

个体模式

包括单例模式和循环模式。单例模式只接收一个事件,而循环模式可以接收多个事件。
(1)量词
可以在一个个体模式后追加量词,也就是指定循环次数

// 匹配出现4

start.time(4)

// 匹配出现0次或4

start.time(4).optional

// 匹配出现234

start.time(2,4)

// 匹配出现234次,并且尽可能多地重复匹配

start.time(2,4).greedy

// <

  • 86
    点赞
  • 139
    收藏
    觉得还不错? 一键收藏
  • 53
    评论
Flink CEP (Complex Event Processing) 是Apache Flink的一个组件,用于处理和查询数据流中的复杂事件模式。动态规则是指在运行时能够动态修改和更新事件模式的规则。具体而言,在使用Flink CEP进行事件处理时,动态规则允许我们根据实时需求对规则进行灵活调整。 动态规则的实现可以通过在Flink CEP中使用可扩展的API。Flink CEP提供了创建和管理事件规则的方法,这些规则可以根据特定的需求进行灵活的增删改。通过使用动态规则,我们可以在不中断系统运行的情况下动态地添加、删除或修改事件的匹配规则。这对于处理实时数据流的应用非常有用,因为业务需求往往会随着时间的推移而变化,需要根据新的规则及时适应数据的变化。 使用动态规则的一个实际场景是,当我们需要监控在线交易时的欺诈行为。我们可以配置一组初始规则来检测可能的欺诈模式。然而,在实际应用中,新的欺诈模式可能会不断出现,将新的规则手动添加到系统中效率低且不够实时。因此,我们可以使用Flink CEP动态规则功能,根据欺诈行为的新模式实时更新规则,确保系统始终能够检测到最新的欺诈模式,提高交易监控的准确性和效率。 总之,Flink CEP动态规则功能提供了一种灵活的方式来处理实时事件流中的复杂模式匹配需求。通过实时地更新和更改规则,我们可以及时适应业务需求的变化,提高系统的实时性和准确性。这在许多应用场景中都是非常有价值的,特别是那些需要随时适应新规则的实时数据处理任务中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 53
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值