flink cep 原理分析1

本文深入介绍了 Flink CEP 库,用于处理复杂事件,如实时提取特定模式。文章通过示例解释了如何创建匹配模式,并探讨了 NFA-b 模型,包括其状态、有向边和运行机制。NFA-b 结合了非确定性有限自动机与缓存,用于存储查询结果,有效地处理事件序列。
摘要由CSDN通过智能技术生成

一,flink cep简介

flink cep 主要用来处理复杂事件的库,如实时提取一段时间内股票涨,跌,涨,跌的事件并作出对应的决策。
官网地址https://ci.apache.org/projects/flink/flink-docs-release-1.9/zh/dev/libs/cep.html

二,demo

需求1:要在事件序列中提取 连续数据是 10,20,10 的事件
需求2:要在事件序列中提取 连续数据是 10 (10-50)+ 0 (第一个数是10,后续连续到来一个或者多个10到50之间的数字(终止条件:出现大于50的数字))的事件 最后到来一个是0的数字
如下代码实现

/**
  * cepDemo create by 梁丰
  */
object DemoFlinkCep1 {

  case class EventData(value:Int) 

  def main(args: Array[String]): Unit = {

    val environment: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
    environment.setParallelism(1)
    //输入数据
    val input: DataStream[String] = environment.socketTextStream("liangfeng02",9999)
    //模拟股票数据
    val sharesStream: DataStream[EventData] = input.map(x=>EventData(x.toInt))
    //sharesStream.print()
    //创建匹配模式
    val pattern: Pattern[EventData, EventData] = createPattern1
    //pattern 和输入流进行关联
    val patternStream: PatternStream[EventData] = CEP.pattern(sharesStream,pattern)
    //打印结果
    printPatternStreamMethod2(patternStream)
    environment.execute("flinkDemo")
  }

  /**
    * 创建匹配模式 10 20 10
    * @return
    */
  def createPattern() ={
    val pattern: Pattern[EventData, EventData] = Pattern
      .begin[EventData]("start").where(_.value.equals(10))
      .next("next").where(_.value.equals(20))
      .next("next1").where(_.value.equals(10))
    pattern
  }

  /**
    * 创建匹配模式 10 (10-50)+ 0
    * @return
    */
  def createPattern1() ={
    val pattern: Pattern[EventData, EventData] = Pattern
      .begin[EventData]("start").where(_.value.equals(10))
      .next("next1").oneOrMore.where(_.value > 10).until(_.value > 50)
    
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值