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

Flink CEP:FollowedBy模式:同一事件多次循环该模式

巫马炫明
2023-03-14

我是Flink CEP的新手,一直在玩弄这些模式,以便更好地理解它们。我有一个简单的“开始”的例子

Pattern match\u win=模式。开始(“第一”)。其中(new SimpleCondition(){

    public boolean filter(HitDTO hitDTO) throws Exception {
        boolean result = false;
        if (hitDTO.getHitScore() == 4)
        {
            System.out.println("First:" + hitDTO + ": " + hitDTO.getHitScore());
            result = true;
        }
        return result;
    }
}).followedBy("next").where(new SimpleCondition<HitDTO>(){

    public boolean filter(HitDTO hitDTO) throws Exception
    {
        boolean result = false;

        if (hitDTO.getHitScore() == 6)
        {
            System.out.println("Next:" + hitDTO+ ": " + hitDTO.getHitScore());
            result = true;
        }
        return result;
    }
});

我正在通过4,4,6

并行度设置为1。

StreamExecutionEnvironment env=StreamExecutionEnvironment。getExecutionEnvironment()。setParallelism(1);

然而,这是我在模式内打印输出的日志中看到的,其中6在仅传入一次时循环了4次。

第一:com.rs.dto.HitDTO@17619295:4

第一:com。卢比dto。HitDTO@c108f70:4

下一步:com。卢比dto。HitDTO@5d13aab8:6

下一步:com。卢比dto。HitDTO@5d13aab8:6

下一步:com。卢比dto。HitDTO@5d13aab8:6

下一步:com。卢比dto。HitDTO@5d13aab8:6

只是想知道为什么同一个事件循环多次,但结果是正确的。

谢谢你的回答。

共有1个答案

巫马泓
2023-03-14

尝试将模式与输入序列匹配的过程将涉及对模式的各个组件的多次评估,这是正常的。模式匹配就是这样工作的:模式被编译成一个有限状态机,并且考虑输入可能通过该FSM的所有可能路径,寻找通向终端的路径,匹配状态。如果您在定义模式时不小心,这可能会导致组合爆炸式的努力。

 类似资料:
  • 我需要使我的输出像预期的输出一样。我试图添加符号,但输出不像预期的输出 这是我的代码:

  • 事件是应用程序与自身各个功能模块以及与操作系统进行通讯的手段,也是实现事件驱动编程模型的基础,应用程序如果要响应这些事件,通常是创建一个事件队列来集中存放它们,从事件队列取出事件并调用对应处理器就是一次事件响应,而往复执行这个操作的过程就是事件循环。 驱动接口 LCUI 对事件循环的操作有处理事件、绑定事件和解绑事件,驱动模块的职责就是基于操作系统接口向 LCUI 提供实现了这些操作的接口。首先我

  • 我有两个相互链接的JSON模式:schema.task.JSON和schema.dependency.JSON: 我使用的是Visual Studio 2013,Update 5,模式http://json-schema.org/draft-04/schema 有人知道创建具有跨文件循环依赖关系的JSON模式的正确方法吗?

  • 我们在我的工作场所使用Redshift,上周我一直在处理一系列关于更改某个表的模式的请求,这已经成为一个非常乏味的过程(包括更新ETL作业和Redshift视图)每天。 该过程可以总结为: 在将原始数据加载到红移之前,更改生成原始数据的ETL作业 当然,在这个过程中会涉及到测试和其他耗时的步骤。 表架构的“自然”更改频率是多少?在不浪费太多时间或不必重新执行所有“机械”流程的情况下,处理此问题的最

  • 我试图实现每秒循环一次的ScheduledExecutorService线程,但现在它只循环一次。 我的问题是如何设置它,使它周期性地循环,而不是一次迭代? 另外,如何将连接池传递给线程,以便每次迭代都可以查询数据库?任何帮助都非常感谢。

  • 我正在尝试使用Netty4.1编写一个TCP服务器,它将承载数千个持久连接(TL)。x、 在性能测试期间,我们观察到,如果有几千个到服务器的连接,然后我们得到一个突发的连接,比如说另外几千个连接,这些新的SSL握手会使工作线程长时间处于繁忙状态,这会导致现有连接开始超时。在internet上提供的所有Netty示例中,我看到服务器是这样引导的: 我想知道我是否可以使用两个工人组而不是一个。因此,我