我正在开发一个火花流应用程序,并且在了解接收器和水印逻辑的同时,我找不到明确的答案,即我是否在输出更新输出模式的聚合时使用阈值10分钟的水印, 10分钟阈值期满后,火花保持的间歇状态是否会被清除?
答案 0 :(得分:1)
水印允许使用窗口在一段时间内考虑将较迟到达的数据包含在已计算的结果中。它的前提是它可以追溯到某个时间点(阈值),在该时间点之前,假定不再有较晚的事件应该到达,但是如果到达,则将其丢弃。
因此,需要维护已计算的窗口/聚合状态,以根据事件时间处理这些潜在的最新更新。但是,这会浪费资源,并且如果无限执行,则会炸毁结构化流应用程序。
在10分钟的阈值期满后,是否会清除火花所维持的间歇状态?是的。根据设计,由于阈值已过期,没有点再保持任何状态都无法再更新。
您需要看一些简单的示例,因为我注意到很容易忘记输出的精妙之处。
请参阅 this 这也是更新模式输出的一个很好的例子。这也提供了一个更好的更新示例:Why does streaming query with update output mode print out all rows?
甚至更好-这个博客的图片很好:https://databricks.com/blog/2016/07/28/structured-streaming-in-apache-spark.html