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

问题描述

我是Flink CEP的新手,并且一直在研究模式以更好地理解它们。 我有一个“ begin”和“ bysbyBy”的简单案例。 我注意到,在followedBy的情况下,同一事件多次循环遍历它。 我在这里想念什么?

模式match_win = Pattern.begin(“ first”)。where(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.rs.dto.HitDTO@c108f70:4

Next:com.rs.dto.HitDTO@5d13aab8:6

Next:com.rs.dto.HitDTO@5d13aab8:6

Next:com.rs.dto.HitDTO@5d13aab8:6

Next:com.rs.dto.HitDTO@5d13aab8:6

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

感谢您的回答。

解决方法

正常情况下,尝试将模式与输入序列进行匹配的过程将涉及对模式的各个组成部分的多次评估。这就是模式匹配的工作方式:将模式编译为有限状态机,并考虑输入可能通过FSM的所有可能路径,寻找导致终端匹配状态的路径。如果您不小心定义模式,则可能会导致组合工作量激增。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...