当前位置: 首页 > 知识库问答 >
问题:

针对NOT followedBy的Apache Flink CEP模式操作

郑光济
2023-03-14

我有一个场景,如果第二个事件在x秒内没有跟随第一个事件,我必须更改状态。例如,对于用户没有在100分钟内注销,将他视为处于无效状态。如何使用当前模式操作设计这一点?

共有2个答案

司徒鸿文
2023-03-14

目前这是不可能做到的。解决方案是有一个超时处理程序,每当事件序列超出定义的时间窗口而被丢弃时,就会触发该超时处理程序。跟踪超时处理程序实现的JIRA问题已经存在。

公冶桐
2023-03-14

由于这已经实现,我想为那些来这里寻找答案的人回答这个问题。

从Flink 1.0.0开始,这可以通过处理Timedout模式来完成,例如,如果您的CEP模式是这样的:

示例部分摘自Flink网站(1.2和1.3之间有一些重大变化,请相应调整您的代码,此答案侧重于1.3)

模式描述:-在10秒内获取第一个“错误”类型的事件,然后是第二个“关键”类型的事件事件

Pattern<Event, ?> pattern = Pattern.<Event>begin("start")
.next("middle").where(new SimpleCondition<Event>() {
    @Override
    public boolean filter(Event value) throws Exception {
        return value.getName().equals("error");
    }
}).followedBy("end").where(new SimpleCondition<Event>() {
    @Override
    public boolean filter(Event value) throws Exception {
        return value.getName().equals("critical");
    }
}).within(Time.seconds(10));

PatternStream<BAMEvent> patternStream = CEP.pattern(inputStream, pattern)

DataStream<Either<String, String>> result = patternStream.select(new PatternTimeoutFunction<Event, String>() {
  @Override
  public String timeout(Map<String, List<Event>> map, long l) throws Exception {
    return map.toString() +" @ "+ l;
  }
}, new PatternSelectFunction<Event, String>() {

  @Override
  public String select(Map<String, List<Event>> map) throws Exception {
    return map.toString();
  }
});

对于这种情况,如果用户即使在100分钟后也没有注销,那么由于相应的事件不会到达,这将导致模式为timedout,部分事件(起始事件)将在PatternTimeoutFunction中捕获。

 类似资料:
  • 以下是xml代码

  • 问题内容: 我有一个XML文件,并且有一个XML模式。我想针对该架构验证文件,并检查其是否符合该架构。我正在使用python,但是如果python中没有这样有用的库,则可以使用任何语言。 我在这里最好的选择是什么?我会担心如何快速启动和运行它。 问题答案: 绝对可以。 使用预定义的架构定义,加载文件并捕获任何XML架构错误: 关于编码的注意事项 如果模式文件包含带有编码(例如)的xml标记,则上面

  • 本文向大家介绍php针对cookie操作的队列操作类实例,包括了php针对cookie操作的队列操作类实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php针对cookie操作的队列操作类。分享给大家供大家参考。具体分析如下: 这里包括了从简单的cookie操作(增加,删除,修改)到我们的cookie队列操作类的操作,对此感兴趣的朋友可以参考一下。 一、PHP 的COOKIE cook

  • 我试图根据Python中的JSON模式验证TSV文件的行。下面是该模式的一个示例: TSV文件如下所示: null

  • 浮动按钮 浮动按钮是一个改进操作的一个特殊例子。它有一个浮在整个界面之上的图标,并且在改变、启动、转换锚点时有特殊的动作,这使得浮动按钮与其他的按钮区别开来。 浮动按钮的大小有两种:默认大小的和迷你版的。迷你版的浮动按钮只应在需要和屏幕上的其他元素产生视觉上的延续性时使用。 相关内容 不是每个界面都需要一个浮动按钮。浮动按钮应该包含一个应用里最主要的操作。在屏幕的左侧的界面中,它最主要的操作通过点

  • 我想知道是否存在删除指针的模式。更具体地说,当您需要为数据调用某种中间函数时。下面是我所想的一个例子: 其目的是避免对集合属性的数据进行中间调用。再一次,我只是想问一下这是不是常用的,或者一开始是不是一个好主意。 非常感谢。