十三 Flink CEP

1 概念

一个或多个由简单事件构成的事件流通过一定的规则匹配,然后输出用户想得到的数据,满足规则的复杂事件。
特征:
• 目标:从有序的简单事件流中发现一些高阶特征
• 输入:一个或多个由简单事件构成的事件流
• 处理:识别简单事件之间的内在联系,多个符合一定规则的简单事件构成复杂事件
• 输出:满足规则的复杂事件
在这里插入图片描述
在这里插入图片描述

2 使用

2.1 pom文件

<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-cep-scala_${
   scala.binary.version}</artifactId>
<version>${
   flink.version}</version>
</dependency>

2.2 使用

Event Streams
登录事件流

case class LoginEvent(userId: String,
	ip: String,
	eventType: String,
	eventTime: String
)
val env = StreamExecutionEnvironment.getExecutionEnvironment
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
env.setParallelism(1)
val loginEventStream = env
	.fromCollection(List(
	LoginEvent("1", "192.168.0.1", "fail", "1558430842"),
	LoginEvent("1", "192.168.0.2", "fail", "1558430843"),
	LoginEvent("1", "192.168.0.3", "fail", "1558430844"),
	LoginEvent("2", "192.168.10.10", "success", "1558430845")
))
.assignAscendingTimestamps(_.eventTime.toLong * 1000) 

2.3 Pattern API

每个 Pattern 都应该包含几个步骤,或者叫做 state。从一个 state 到另一个 state,通常我们需要定义一些条件,例如下列的代码;

/**
选出在10秒内连续两个两次登录失败
*/
val loginFailPattern = Pattern.begin[LoginEvent]("begin") //第一个event
.where(_.eventType.equals("fail"))
.next("next") //第二个event
.where(_.eventType.equals
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值