Flink 1.14,Java,表API+数据流API(toDataStream
/toAppendStream
(。我正在尝试:从Kafka
读取事件,每小时聚合(sum
、count
等(,并在新事件到来时将结果追加到Cassandra
,换句话说——创建新记录或重新计算每个新事件的现有记录,并立即将结果汇到Cassandra。目的是看到主键记录的sum
、count
值的不断更新。为此,我使用SQL:
...
TUMBLE(TABLE mytable, DESCRIPTOR(action_datetime), INTERVAL '1' HOURS)
...
但任务在窗口间隔过期后(每1小时(将结果发送给Cassandra。我知道,它的工作描述在文档:
与连续表上的其他聚合不同,窗口聚合不发出中间结果,而只发出最终结果窗口末尾的聚合。
问题:我如何实现该行为(一旦出现新事件,就发出以接收中间结果(?不要等一个小时才关上窗户。
以下是一些选项。也许它们都不是你想要的:
(1( 使用累积而不是TUMBLE。这不会为您提供每个新事件的更新结果,但您可以频繁更新结果,例如,每分钟更新一次。
(2( 使用OVER聚合。这将为您提供在前60分钟内持续更新的聚合(与每个事件对齐,而不是与历元对齐(。
(3( 使用带有自定义触发器的DataStream窗口,该触发器随每个事件触发。这将提供您要求的行为,但需要使用DataStream API进行重写。