Kafka Streams是否在内部计算水印?在窗口完成时(即,水印通过窗口结束时)是否可以观察窗口的结果?
答案 0 :(得分:2)
Kafka Streams是否在内部计算水印?
不。 Kafka Streams遵循连续更新处理模型,该模型不需要水印。您可以在线找到有关此内容的更多详细信息:
是否可以观察到窗口的结果(仅当窗口完成时)(即,当水印通过窗口末尾时)?
您可以随时观察窗口的结果。通过(例如)KTable#toStream()#foreach()
(即基于推送的方法)或通过Interactive Queries来订阅结果变更日志流,该方法使您可以主动查询结果窗口(即基于拉取的方法)。 / p>
如@Dmitry所述,对于基于推的方法,如果您仅对窗口的最终结果感兴趣,还可以使用suppress()
运算符。
答案 1 :(得分:1)
Kafka Streams在内部不使用水印,但是2.1.0中的一项新功能使您可以在关闭窗口时观察窗口的结果。它称为Suppressed
,您可以在文档中阅读:Window Final Results:
KGroupedStream<UserId, Event> grouped = ...;
grouped
.windowedBy(TimeWindows.of(Duration.ofHours(1)).grace(ofMinutes(10)))
.count()
.suppress(Suppressed.untilWindowCloses(unbounded()))