kafka流如何计算水印?

时间:2019-02-08 01:47:17

标签: apache-kafka apache-kafka-streams

Kafka Streams是否在内部计算水印?在窗口完成时(即,水印通过窗口结束时)是否可以观察窗口的结果?

2 个答案:

答案 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()))