我在滚动窗口上使用抑制以获得汇总结果。我正在探索untilTimeLimit和untilWindowCloses进行抑制。 我不希望在缓冲区已满时关闭流。我已经看到了此功能emitEarlyWhenFull(),但是它不能应用到untilWindowCloses之上。 因此,我选择带有EmitEarlyWhenFull()的untilTimeLImit,请参考以下代码:
groupedStreams.windowedBy(TimeWindows.of(Duration.ofMinutes(5)))
.aggregate(() -> initialBlob, blobAggregator,someserde)
.suppress(Suppressed.untilTimeLimit(Duration.ofMinutes(5), new StrictBufferConfigImpl().emitEarlyWhenFull()))
.toStream()
就我而言,我正在使用滚动窗口5分钟。因此,每5分钟,将为每个记录键打开一个窗口。根据文档,最旧的记录将在缓冲区被填充时发送。 在同一翻滚窗口中向下发送旧记录之后,使用相同密钥的新记录会发生什么?
例如:消息流: (A,1) (A2) (A,3)-> agg结果:(A,6)。假设这里缓冲区已满,(A,6)将向下游发送。假设(A,4)现在在同一翻滚窗口中,接下来会发生什么?是(A,10)还是重新以(A,4)重新开始?
答案 0 :(得分:0)
如果suppress()
发出,状态将被保留。因此,以您的示例为例,聚合将继续进行,最终将发出(A,10)。