一,flink cep简介
flink cep 主要用来处理复杂事件的库,如实时提取一段时间内股票涨,跌,涨,跌的事件并作出对应的决策。
官网地址https://ci.apache.org/projects/flink/flink-docs-release-1.9/zh/dev/libs/cep.html
二,demo
需求1:要在事件序列中提取 连续数据是 10,20,10 的事件
需求2:要在事件序列中提取 连续数据是 10 (10-50)+ 0 (第一个数是10,后续连续到来一个或者多个10到50之间的数字(终止条件:出现大于50的数字))的事件 最后到来一个是0的数字
如下代码实现
/**
* cepDemo create by 梁丰
*/
object DemoFlinkCep1 {
case class EventData(value:Int)
def main(args: Array[String]): Unit = {
val environment: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
environment.setParallelism(1)
//输入数据
val input: DataStream[String] = environment.socketTextStream("liangfeng02",9999)
//模拟股票数据
val sharesStream: DataStream[EventData] = input.map(x=>EventData(x.toInt))
//sharesStream.print()
//创建匹配模式
val pattern: Pattern[EventData, EventData] = createPattern1
//pattern 和输入流进行关联
val patternStream: PatternStream[EventData] = CEP.pattern(sharesStream,pattern)
//打印结果
printPatternStreamMethod2(patternStream)
environment.execute("flinkDemo")
}
/**
* 创建匹配模式 10 20 10
* @return
*/
def createPattern() ={
val pattern: Pattern[EventData, EventData] = Pattern
.begin[EventData]("start").where(_.value.equals(10))
.next("next").where(_.value.equals(20))
.next("next1").where(_.value.equals(10))
pattern
}
/**
* 创建匹配模式 10 (10-50)+ 0
* @return
*/
def createPattern1() ={
val pattern: Pattern[EventData, EventData] = Pattern
.begin[EventData]("start").where(_.value.equals(10))
.next("next1").oneOrMore.where(_.value > 10).until(_.value > 50)