Apache Flink,获取窗口中的最后一个事件
我正在做一个项目,我有一个4天大小的窗口,一个步骤是1天Apache Flink,获取窗口中的最后一个事件,apache,scala,apache-flink,flink-streaming,flink-cep,Apache,Scala,Apache Flink,Flink Streaming,Flink Cep,我正在做一个项目,我有一个4天大小的窗口,一个步骤是1天 .timewindow(Time.days(4), Time.days(1)) 我还有一个触发器 .trigger(new myTrigger) onEventTime ---> Continue onProccessingTime ---> Continue clear ---> Purge onElement---> (if element.isFinalTransaction) TriggerResul
.timewindow(Time.days(4), Time.days(1))
我还有一个触发器
.trigger(new myTrigger)
onEventTime ---> Continue
onProccessingTime ---> Continue
clear ---> Purge
onElement---> (if element.isFinalTransaction) TriggerResult.FIRE_AND_PRUGE
isFinalTransaction是一个布尔值,如果为true,则调用FAP。
问题是如何根据元素是否是窗口中的最后一个元素使其返回true/false
是否有任何方法可以告诉我们当前元素是否是窗口中的最后一个元素?
是否有任何方法可以告诉我们当前窗口是否已完成(在滑动之前)?来自抽象触发器类() 简短的回答是否。对于添加到窗格中的每个元素,都会调用方法OneElement。当添加一个元素时,不可能知道它是否是最后一个元素,因为在下一个元素出现之前,该信息是未知的(我们可以查看它是在这个窗口中还是在下一个窗口中) 但是,另一种选择是检查元素是否足够接近窗口的末尾(因为OneElement可以访问窗口,例如if(timestamp>window.getEnd-delta)
但是,我想不出一个我会推荐这样做的用例。如果您需要访问窗口中的最后一个元素,您可能只需要使用WindowFunction并在apply方法中获取输入iterable的最后一个元素(input.last).很抱歉,我根本没有回答这个问题。为什么你真的需要一个自定义触发器。这实际上是默认触发器应该做的。或者你对“FinalTransaction”有一个特殊的定义吗?@TobiSH嗯,FinalTransaction是一个布尔值,它可以告诉触发器实际事件是否是窗口中的最后一个事件我认为是@TobiSH的问题是,您似乎只需要常规的窗口支持。所以,如果您能提供更多关于为什么需要自定义触发器的详细信息,这将有所帮助。