热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Flink中的CEP了解及总结

**1.##简介

**

1. ## 简介

CEP(Complex Event Processing):复杂事件处理,用于在流中筛选符合某种复杂模式的事件.

2. 什么是CEP

  • CEP允许在无休止的事件流中检测事件模式,让我们能获取重要的部分.
  • 一个或多个由简单事件构成的事件流通过一定的规则匹配,然后输出用户想要的信息—满足规则的复杂事件

3. Pattern API

  • flink为我们支持了CEP中的Pattern API用来处理流式数据中的复杂事件处理.
  • 通过Pattern类中begin方法及where方法等来实现想要的需求.

个体模式

  • 包括单例模式和循环模式
  • 单例模式只接受一个事件就是一个begin方法加一个where方法等后面不加其他紧挨着.下一个等事件
  • 循环模式则是接受多个事件可以复杂事件.
  • 量词中有times(参数).ooptical匹配0或参数个.times(1,3)一个或者二个.三个times(4,5).greedy匹配4个或者5个可以重复匹配等

模式序列中也分为严格近邻和宽松近邻和非确定性宽松近邻还可以定义不希望近邻关系a next b 近邻 a followedBy b 宽松近邻 a followedbyAny b 非确定性宽松近邻 还有notNext() notFollowedBy() 不希望出现近邻

##格式注意

  • 所有模式序列都必须以.begin()开始
  • 模式序列结束不能以.notFollowedBy()结束
  • not 类型的模式不能被optical所修饰
  • 还可以为模式指定时间约束,用来约束多长时间内匹配有效within()方法

使用

  • CEP.parttern()里面放第一个参数为流,第二个就是匹配的模式就得到一个PatternStream流
  • 匹配事件时间的提取方法为select方法和flatSelect方法.提取事件
  • select方法需要传入一个selectFunction作为参数每个成功的事件序列都会调用它
  • select方法以一个Map[String,iterable[IN]]来接收匹配到的事件序列,其中key就是每个模式的名称,而value就是所有接收到的事件的Iterable类型
  • 超时事件提取当一个模式以within定义窗口时间,就会有遗漏的数据CEP支持我们通过侧输出流的方式处理超时事件的处理

代码实现

val loginFailPattern = Pattern
.begin[LoginEvent]("fail").where(_.eventType == "fail").times(3).consecutive()
.within(Time.seconds(5))
//2.将模式应用到数据流上,得到一个PattenStream
val patternStream = CEP.pattern(loginEventStream.keyBy(_.userId), loginFailPattern)
//3.检出符合模式的数据流,需要调用select
val loginFailWarningStream = patternStream.select(new LoginFailEventMatch())

//实现自定义PatternSelectFunction
class LoginFailEventMatch() extends PatternSelectFunction[LoginEvent,LoginFailWarning]{
override def select(pattern: util.Map[String, util.List[LoginEvent]]): LoginFailWarning = {
//当前匹配到的事件序列,就保存在Map里
// val firstFailEvent = pattern.get("firstFail").iterator().next()
// val secOndFailEvent= pattern.get("secondFail").get(0)
val iter = pattern.get("fail").iterator()
val firstFailEvent = iter.next()
val secondFailEvent = iter.next()
val thirdFailEvent = iter.next()
LoginFailWarning(firstFailEvent.userId,firstFailEvent.timestamp,thirdFailEvent.timestamp,"login fail")
}
}

推荐阅读
  • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 本文提供了关于数据库设计的建议和注意事项,包括字段类型选择、命名规则、日期的加入、索引的使用、主键的选择、NULL处理、网络带宽消耗的减少、事务粒度的控制等方面的建议。同时还介绍了使用Window Functions进行数据处理的方法。通过遵循这些建议,可以提高数据库的性能和可维护性。 ... [详细]
  • Redis通用指令及数据库操作详解
    本文详细介绍了Redis中的通用指令,包括key的基本操作、扩展操作和查询模式,以及数据库的基本操作和相关操作。同时还解决了key重复问题,并提供了解决方案。文章内容参考了黑马Redis教程。 ... [详细]
author-avatar
zhangmy0815522
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有