什么是cep算子_Flink中的CEP复杂事件处理 (源码分析)

本文介绍了Flink中的CEP(复杂事件处理)机制,通过正则表达式方式定义逻辑,利用NFA(非确定性有限状态自动机)进行匹配。在Flink中,CEP被设计为一种算子,通过NFAFactory创建NFA对象,处理数据时,根据事件时间注册定时器并存储事件。在事件触发时,遍历状态队列,判断数据是否匹配,完成状态匹配后执行用户定义的选择操作。
摘要由CSDN通过智能技术生成

其实CEP复杂事件处理,简单来说你可以用通过类似正则表达式的方式去表示你的逻辑,表现能力非常的强,用过的人都知道

开篇先偷一张图,整体了解FlinkCEP中的  一种重要的图  NFA

FlinkCEP在运行时会将用户的逻辑转化成这样的一个NFA Graph (nfa对象)

graph 中包含状态(Flink中State对象),以及连接状态的边(Flink中StateTransition对象)

当从一个State跳变到另一个State时需要通过一条边StateTransition,这条边中包含一个Condition对象包含了用户的逻辑就是我们用户代码中.where()中返回Boolean的方法

也就是说Condition对象中包含是否可以完成状态跳变的条件,A状态要跳变到B状态就必须满足连接AB的边中的条件(边StateTransition对象属于B state)

其中边StateTransition分为三种

take: 状态满足跳变条件后直接跳变到B状态

ignore: 状态满足跳变条件以后又回到原来状态,状态保持不变

process: 这条边可以忽略也可以不忽略

后面源码分析的时候可以看到他们之间的区别

接着从源码来看一下如何用这个NFA图实现Flink中的CEP复杂事件处理的

因为CEP在Flink中被设计成算子的一种而不是单独的计算引擎,所以直接找到CepOperator.java中

来看一下它的初始化Open()

这里看到有一个NFAFactory的工厂创建了一个NFA,这里的这个工厂是在Driver端通过用户编写的代码返回的Patte

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值