Spark 结构化流在附加模式下显示结果为时已晚
Posted
技术标签:
【中文标题】Spark 结构化流在附加模式下显示结果为时已晚【英文标题】:Spark structured streaming shows results too late when in append mode 【发布时间】:2018-10-23 08:35:12 【问题描述】:在https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#handling-late-data-and-watermarking 的文档中,使用 10 分钟的窗口、10 分钟的水印和 5 分钟的触发器显示了一个示例。
在使用 APPEND 模式的图表中,12:00:00->12:10:00 窗口的第一个结果仅在 12:25:00 显示。原因是当时水印是在12:11:00,所以12:11:00之前的所有窗口已经可以发送到sink了。
但是,在 12:20:00,我们已经知道水印是 12:11:00。那么为什么不是在 12:20:00 而不是在 12:25:00 发送第一个窗口呢?
【问题讨论】:
【参考方案1】:因为 Spark 为每个分区应用全局水印而不是水印:下一批的水印是在当前批次中的任务“完成”时决定的。每个分区都不知道决定水印:它只知道其分区中的事件。
所以在 12:20:00,Spark 获取 12:21:00 并处理它,在批处理结束时,Spark 收集事件的时间戳并确定最大时间戳,并决定下一批的水印 - “12 :11:00" - 这将是批次 12:25:00 的水印。
【讨论】:
以上是关于Spark 结构化流在附加模式下显示结果为时已晚的主要内容,如果未能解决你的问题,请参考以下文章
从多个 Kafka 主题读取的 Spark 结构化流式应用程序
Spark结构化流式kafka在没有模式的情况下转换JSON(推断模式)
在Delphi中,使用TreeView创建结构树,何种方法最好?