Flink的CEP使用流程+使用案例

本文介绍了Flink中的CEP(Complex Event Processing)功能,用于在流数据中进行模式匹配。通过实例展示了如何检测同用户2秒内连续两次登录失败以及下单后15分钟未支付的情况,讲解了从获取流、定义Pattern到执行Pattern和处理结果的完整流程。
摘要由CSDN通过智能技术生成

一、CEP

 

    一个或多个由简单事件构成的事件流通过一定的规则匹配,然后输出用户想得到的数据,满足规则的复杂事件。

CEP支持在流上进行模式匹配,根据模式的条件不同,分为连续的条件或不连续的条件;模式的条件允许有时间的限制,当在条件范围内没有达到满足的条件时,会导致模式匹配超时。

CEP就相当于在流上对event进行模式匹配。比如 连续两条登录失败日志不超过2秒,则进行错误预警。

 

二、CEP使用流程

 

    2.1先获取流

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)

 

    2.2    定义Pattern

val loginFailPattern = Pattern.begin[LoginEvent]("begin")

  .where(_.eventType.equals("fail”))//一条登录失败

  .next("next")

  .where(_.eventType.equals("fail”))//下一条登录event也失败

  .within(Time.seconds(2)//两条的间隔不超过两秒

 

    2.3    执行Pattern

PatternStream:

val input = ...

val pattern = ...

 

val patternStream = CEP.pattern(input

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值