大数据学习之Flink——16Flink 的复杂事件处理 CEP

本文参考尚学堂flink课件,
侵权删

复杂事件处理(CEP)是一种基于流处理的技术,将系统数据看作不同类型的事件,通 过分析事件之间的关系,建立不同的事件关系序列库,并利用过滤、关联、聚合等技术,最 终由简单事件产生高级事件,并通过模式规则的方式对重要信息进行跟踪和分析,从实时数据中发掘有价值的信息

一. CEP相关概念

1. 配置依赖

在使用 FlinkCEP 组件之前,需要将 FlinkCEP 的依赖库引入项目工程中。

<dependency> 
	<groupId>org.apache.flink</groupId>
	<artifactId>flink-cep-scala_2.11</artifactId>
	<version>1.9.1</version>
</dependency>
2. 事件定义
  1. 简单事件:
    处理单一事件, 事件的定义可以 直接观察出来, 处理过程中无须关注多个事件之间的关系.
  2. 复杂事件:
    复杂事件处理的不仅是单一的事件, 也处理由多个事件组 成的复合事件. 复杂事件处理监测分析事件流(Event Streaming), 当特定事件发生时来触发某些动作.
    复杂事件中事件与事件之间包含多种类型关系, 常见的有时序关系、聚合关系、层次关系、依赖关系及因果关系等.
二. Pattern API

FlinkCEP 中提供了 Pattern API 用于对输入流数据的复杂事件规则定义, 并从事件流 中抽取事件结果. 包含四个步骤:

  1. 输入事件流的创建
  2. Pattern 的定义
  3. Pattern 应用在事件流上检测
  4. 选取结果

1. 模式定义

1. 说明
  • 定义 Pattern 可以是单次执行模式, 也可以是循环执行模式. 单次执行模式一次只接受 一个事件, 循环执行模式可以接收一个或者多个事件. 通常情况下, 可以通过指定循环次数将单次执行模式变为循环执行模式. 每种模式能够将多个条件组合应用到同一事件之上, 条件组合可以通过 where 方法进行叠加. 每个 Pattern 都是通过 begin 方法定义的

    val start = Pattern.begin[Event]("start_pattern")
    
  • 下一步通过 Pattern.where()方法在 Pattern 上指定 Condition, 只有当 Condition 满 足之后, 当前的 Pattern 才会接受事件。

    start.where(_.getCallType == "success")
    
2. 设置循环次数

对于已经创建好的 Pattern,可以指定循环次数,形成循环执行的 Pattern。

  1. times: 可以通过 times 指定固定的循环执行次数.

    //指定循环触发4次 
    start.times(4);
     //可以执行触发次数范围,让循环执行次数在该范围之内[2-4次]
    start.times(2, 4);
    
  2. optional: 也可以通过 optional 关键字指定要么不触发要么触发指定的次数.

    // 要么不触发, 要么触发4次
    start.times(4).optional();
    // 要么不触发, 要么触发2-4次
    start.times(2, 4).optional();
    
  3. greedy: 可以通过 greedy 将 Pattern 标记为贪婪模式, 在 Pattern 匹配成功的前提下, 会尽可能多地触发.

    //触发2、3、4次,尽可能重复执行 
    start.times
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值