Flink Windows-如何在新事件出现时立即发出中间结果



Flink 1.14,Java,表API+数据流API(toDataStream/toAppendStream(。我正在尝试:从Kafka读取事件,每小时聚合(sumcount等(,并在新事件到来时将结果追加到Cassandra,换句话说——创建新记录或重新计算每个新事件的现有记录,并立即将结果汇到Cassandra。目的是看到主键记录的sumcount值的不断更新。为此,我使用SQL:

...
TUMBLE(TABLE mytable, DESCRIPTOR(action_datetime), INTERVAL '1' HOURS)
...

但任务在窗口间隔过期后(每1小时(将结果发送给Cassandra。我知道,它的工作描述在文档:

与连续表上的其他聚合不同,窗口聚合不发出中间结果,而只发出最终结果窗口末尾的聚合。

问题:我如何实现该行为(一旦出现新事件,就发出以接收中间结果(?不要等一个小时才关上窗户。

以下是一些选项。也许它们都不是你想要的:

(1( 使用累积而不是TUMBLE。这不会为您提供每个新事件的更新结果,但您可以频繁更新结果,例如,每分钟更新一次。

(2( 使用OVER聚合。这将为您提供在前60分钟内持续更新的聚合(与每个事件对齐,而不是与历元对齐(。

(3( 使用带有自定义触发器的DataStream窗口,该触发器随每个事件触发。这将提供您要求的行为,但需要使用DataStream API进行重写。

最新更新