具有大窗口大小的火花结构化流:内存消耗
Posted
技术标签:
【中文标题】具有大窗口大小的火花结构化流:内存消耗【英文标题】:spark structured streaming with large window size: memory consumption 【发布时间】:2020-10-05 07:51:14 【问题描述】:我们计划实施一个 Spark Structured Streaming 应用程序,该应用程序将使用连续的数据流:度量值随时间的演变。 此流式应用程序将使用 7 天的窗口大小(和一个滑动窗口),以便频繁计算过去 7 天的指标值的平均值。
1- Spark 会保留所有这 7 天的数据(对消耗的内存有很大影响),或者 Spark 会不断计算和更新请求的平均值(然后删除处理过的数据),因此不会影响消耗的内存(不保留 7 天的数据)?
2- 如果第一个问题的答案是保留这 7 天的数据,水印的使用会阻止这种保留吗? 假设我们有一个 1 小时的水印; Spark 中只会保留 1 小时的数据,还是会在 Spark 内存中保留 7 天,并且此处的水印只是为了忽略数据时间戳超过 1 小时的新数据?
【问题讨论】:
【参考方案1】:Window Size 7 绝对是一个重要的参数,但它也取决于传入的流数据量/记录。诀窍在于如何使用 Window 持续时间、更新间隔、输出模式以及必要时的水印(如果业务规则不受影响)
1- 如果流配置为滚动窗口大小(即窗口持续时间与更新持续时间相同),在完整模式下,您最终可能会将完整数据保留在内存中 7 天。但是,如果您将窗口持续时间配置为 7 天,每 x 分钟更新一次,则将每 x 分钟计算一次聚合,并且仅将结果数据保存在内存中。因此查看窗口 API 参数并配置获取结果的方式。
2- Watermark 带来了不同的行为,它会忽略 watermark 持续时间之前的记录,并在每个微批次超过 watermark 时间后更新结果表。如果您的业务规则可以包含水印计算,也可以使用它。
在enter link description here详细了解API,输出模式和水印使用方法很好 这将有助于选择正确的组合。
【讨论】:
以上是关于具有大窗口大小的火花结构化流:内存消耗的主要内容,如果未能解决你的问题,请参考以下文章