flink CEP之规则解释

flink CEP表示复杂事件处理。

CEP开发流程:

  1. 输入事件流的创建即DataStream
  2. pattern的定义即规则定义
  3. 通过pattern规则去事件流匹配
  4. 选取结果

pattern

1.规则定义

1.首先每个规则的定义都是通过Patttern.begin进行定义的。(  ----val start = Pattern.begin[Event]("start_pattern") ----- )

2.规则条件

条件

定义条件 在 FlinkCEP 中通过 pattern.where()、 pattern.or()及pattern.until()方法来为 Pattern 指定条件

简单条件 

 start.where(_.getID == "9527") 根据事件中的字段信息进行判断

组合条件  默认每个条件通过 AND 逻辑相连比如.where(..).where(...) 构成and条件。 .where(..).or(..)构成或的条件。           

val start = Pattern.begin[Event]("start_pattern")                                                         
                 .where(_.callType=="success").or(_.age >30)    

终止条件   如果程序中使用了 oneOrMore 或者 oneOrMore().optional()方法,还可以指定停止条件                                 

start.oneOrMore.until(_.getID == "123")

 

循环次数 

 对于已经创建好的 Pattern,可以指定循环次数,形成循环执行的 Pattern

times

//指定循环触发4次 
start.times(4); 
//可以执行触发次数范围,让循环执行次数在该范围之内 
start.times(2, 4);

optional

start.times(4).optional() 要么不触发,要么触发指定的次数 
start.times(2, 4).optional() 要么不触发,要么触发指定的次数 

greedy

//触发2、3、4次,尽可能重复执行 
start.times(2, 4).greedy()
//触发0、2、3、4次,尽可能重复执行 
start.times(2, 4).optional().greedy()

oneOrMore

// 触发一次或者多次 
start.oneOrMore()
//触发一次或者多次,尽可能重复执行 
start.oneOrMore().greedy() 
// 触发0次或者多次 
start.oneOrMore().optional() 
// 触发0次或者多次,尽可能重复执行 
start.oneOrMore().optional().greedy()

timesOrMore

// 触发两次或者多次 
start.timesOrMore(2);
// 触发两次或者多次,尽可能重复执行 
start.timesOrMore(2).greedy()
// 不触发或者触发两次以上,尽可能重复执行 
start.timesOrMore(2).optional().greedy()

 

模式序列   

其中有严格邻近、宽松邻近、非确定宽松邻近三种邻近连接条件。

 =严格邻近=  =next

//示例
begin("first").where(_.name='a').next("second").where(_.name='b')
//当且仅当数据为a,b时,模式才会被命中。如果数据为a,c,b,由于a的后面跟了c,所以a会被直接丢弃,模式不会命中。

 =宽松邻近=   followedBy

//示例
begin("first").where(_.name='a').followedBy("second").where(_.name='b')
//当且仅当数据为a,b或者为a,c,b,模式均被命中,中间的c会被忽略掉。

=非确定宽松邻近=   followedByAny

//示例
begin("first").where(_.name='a').followedByAny("second").where(.name='b')
//当且仅当数据为a,c,b,b时,对于followedBy模式而言命中的为{a,b},
//对于followedByAny而言会有两次命中{a,b},{a,b}

 

pattern检测

//Pattern检测
val patternStream = CEP.pattern[Event](dataStream,pattern)

 

 

 

 

 

Flink CEP (Complex Event Processing) 是Apache Flink的一个组件,用于处理和查询数据流中的复杂事件模式。动态规则是指在运行时能够动态修改和更新事件模式的规则。具体而言,在使用Flink CEP进行事件处理时,动态规则允许我们根据实时需求对规则进行灵活调整。 动态规则的实现可以通过在Flink CEP中使用可扩展的API。Flink CEP提供了创建和管理事件规则的方法,这些规则可以根据特定的需求进行灵活的增删改。通过使用动态规则,我们可以在不中断系统运行的情况下动态地添加、删除或修改事件的匹配规则。这对于处理实时数据流的应用非常有用,因为业务需求往往会随着时间的推移而变化,需要根据新的规则及时适应数据的变化。 使用动态规则的一个实际场景是,当我们需要监控在线交易时的欺诈行为。我们可以配置一组初始规则来检测可能的欺诈模式。然而,在实际应用中,新的欺诈模式可能会不断出现,将新的规则手动添加到系统中效率低且不够实时。因此,我们可以使用Flink CEP的动态规则功能,根据欺诈行为的新模式实时更新规则,确保系统始终能够检测到最新的欺诈模式,提高交易监控的准确性和效率。 总之,Flink CEP的动态规则功能提供了一种灵活的方式来处理实时事件流中的复杂模式匹配需求。通过实时地更新和更改规则,我们可以及时适应业务需求的变化,提高系统的实时性和准确性。这在许多应用场景中都是非常有价值的,特别是那些需要随时适应新规则的实时数据处理任务中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值