Apache flink CEP-添加窗口后未执行模式

Apache flink CEP-添加窗口后未执行模式,apache-flink,complex-event-processing,data-stream,Apache Flink,Complex Event Processing,Data Stream,//创建一个包含十个项目的窗口 WindowedStream<ObservationEvent,Tuple,GlobalWindow> windowStream = inputStream.keyBy("rackId").countWindow(10); WindowedStream windowStream=inputStream.keyBy(“rackId”).countWindow(10); //应用窗口函数,添加一些自定义值来计算窗口中的所有值 DataStream<

//创建一个包含十个项目的窗口

WindowedStream<ObservationEvent,Tuple,GlobalWindow> windowStream = inputStream.keyBy("rackId").countWindow(10);
WindowedStream windowStream=inputStream.keyBy(“rackId”).countWindow(10);
//应用窗口函数,添加一些自定义值来计算窗口中的所有值

DataStream<ObservationEvent> inactivityStream = windowStream.apply(new WindowFunction<ObservationEvent, ObservationEvent , Tuple , GlobalWindow>() { 

                        @Override 
                        public void apply(Tuple tuple, GlobalWindow timeWindow, Iterable<ObservationEvent> itr, Collector<ObservationEvent> out) 
                                //custom evaluation logic 
                                out.collect(new ObservationEvent(1,"temperature", "stable")); 
                        } 
                });
DataStream-inactivityStream=windowStream.apply(新的WindowFunction(){
@凌驾
公共无效应用(元组元组、全局窗口时间窗口、Iterable itr、收集器输出)
//自定义求值逻辑
收集(新观测事件(1,“温度”、“稳定”);
} 
});
//定义简单CEP模式

 Pattern<ObservationEvent, ?> inactivityPattern = Pattern.ObservationEvent>begin("first") 
                                .subtype(ObservationEvent.class) 
                                .where(new FilterFunction<ObservationEvent>() { 

                                        @Override 
                                        public boolean filter(ObservationEvent arg0) throws Exception { 
                                                System.out.println( arg0 );  //This function is not at all called
                                                return false; 
                                        } 
                });



PatternStream<ObservationEvent> inactivityCEP = CEP.pattern(inactivityStream.keyBy("rackId"), inactivityPattern); 
Pattern-inactivityPattern=Pattern.ObservationEvent>begin(“第一个”)
.子类型(ObservationEvent.class)
.where(新筛选器函数(){
@凌驾
公共布尔筛选器(ObservationEvent arg0)引发异常{
System.out.println(arg0);//根本不调用此函数
返回false;
} 
});
PatternStream inactivityCEP=CEP.pattern(inactivityStream.keyBy(“rackId”),inactivityPattern);
当我运行这段代码时,where子句中的filter函数根本不会被调用。 我已经打印了inactivityStream.print(),可以看到匹配的值

现在,当我直接插入inputStream而不应用窗口时。模式匹配

我打印了inputStream和WindowedStream,我可以看到它们都发送类似类型的数据


我遗漏了什么

最终应该调用FilterFunction,但是您必须等待10个事件才能看到第一次调用FilterFunction。可能是因为您在窗口测试中等待的时间不够长吗


请记住,如果您有许多唯一的键,这意味着您必须在窗口测试中等待10倍以上的时间,然后才能看到您的筛选函数被调用。

为什么我必须等待?。此外,模型数据只有一个键。窗口立即打印,但未调用过滤器函数。很抱歉,我没有得到“等待”部分。您必须等待,因为在看到该键的10个元素之前,给定键的窗口函数将没有输出。你能发布一个完整的工作示例,以便我进一步评论吗?如果没有完整的代码示例,很难看出是什么导致了您的问题。