在https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#handling-late-data-and-watermarking上的文档中,使用10分钟的窗口、10分钟的水印和5分钟的触发器显示了一个示例。
在图表中,当使用附加模式时,12:00:00->12:10:00窗口的第一个结果仅显示在12:25:00。因为当时水印是在12:11:00,所以12:11之前的所有窗口都可以发送到接收器。
然而,在12:20,我们已经知道水印是12:11:00。那么为什么第一个窗口不是在12:20而不是12:25发送的呢?
发布于 2018-10-30 06:23:26
因为Spark为每个分区应用了全局水印而不是水印:下一批的水印是在当前批处理中的任务“完成”时决定的。每个分区都不知道如何确定水印:它只知道分区中的事件。
所以在12:20,星火得到12:21并处理它,在批处理结束时,火花收集事件的时间戳并确定最大时间戳,并决定下一批的水印-- "12:11:00“--这将是一批12:25:00的水印。
https://stackoverflow.com/questions/52944612
复制相似问题