一、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