一个Flink-Cep使用案例

本文通过一个物联网监控案例,详细介绍了如何利用Flink-Cep结合Groovy和Aviator实现动态规则处理。讨论了Flink-Cep在复杂事件处理中的应用,Groovy在动态生成Pattern对象中的作用,以及Aviator在执行条件表达式中的功能。案例中,Groovy脚本根据用户需求动态生成Pattern,Aviator则负责解析和求值表达式,以适应不断变化的监控阈值。
摘要由CSDN通过智能技术生成

本篇主要演练使用Flink-Cep+Groovy+Aviator 来实现一个物联网监控规则中的一个场景案例,后续将会介绍如何实现规则动态变更。

技术背景简介

Flink-Cep 是flink中的高级library,用于进行复杂事件处理,例如某一类事件连续出现三次就触发告警,可以类比Siddhi、Esper;

Groovy 是一种动态脚本语言,可以让用户输入代码变成后台可执行代码,像刷题网站leetcode 应该就是用了这么类似的一个东西;

Aviator 用于执行求值表达式,例如求1>2的值,得到true,为什么用这个东西,也跟后续动态规则变更相关,接下来的案例也会具体介绍。

案例分析

物联网通常都是设备数据,比喻说设备的温度、耗电量等等,会有对设备的监控,例如求设备连续三个点的值大于10且三个点的求和值大于100,要求将这三个点发送到下游进行处理,首先看一下直接使用Flink-Cep api的实现:

case class  DpData(dpId:String,value:Double)
val pattern=Pattern.begin("start",AfterMatchSkipStrategy.skipPastLastEvent()).where(new SimpleCondition[DpData] {
      override def filter(value: DpData): Boolean = value.value>10
    }).times(2).consecutive()
      .next("next").where(new IterativeCondition[DpData] {
      override def filter(value: DpData, ctx: IterativeCondition.Context[DpData]): Boolean =      {
        if(value.value>10) {
          val sum=value.value+ctx.getEventsForPattern("start").map(_.value).sum
          return sum>100
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值