大窗口spark结构化流媒体:内存消耗

whitzsjs  于 2021-05-24  发布在  Spark
关注(0)|答案(1)|浏览(373)

我们计划实现一个spark结构化流应用程序,它将消耗连续的数据流:度量值随时间的演化。此流应用程序将使用7天的窗口大小(和滑动窗口),以便经常计算过去7天度量值的平均值。
1-spark会保留所有7天的数据(影响大量的内存消耗),还是spark会持续计算和更新请求的平均值(然后去掉处理过的数据),因此不会影响如此多的内存消耗(不保留7天的数据)?
2-如果第一个问题的答案是保留了这7天的数据,使用水印是否会阻止这种保留?假设我们有一个1小时的水印;spark中只保留1小时的数据,或者spark内存中仍保留7天,而水印仅用于忽略数据时间戳早于1小时的新数据?

tag5nh1u

tag5nh1u1#

窗口大小7肯定是一个重要的,但它也取决于流数据量/记录进来。诀窍在于如何使用窗口持续时间、更新间隔、输出模式以及必要时使用水印(如果业务规则不受影响)
1-如果流配置为滚动窗口大小(即窗口持续时间与更新持续时间相同),使用完整模式,则可能会将完整数据保留在内存中7天。但是,如果将窗口持续时间配置为7天,每x分钟更新一次,则将每x分钟计算一次聚合,并且只有结果数据将保留在内存中。因此,请查看windowapi参数并配置获取结果的方法。
2-水印带来了不同的行为,它忽略了水印持续时间之前的记录,并在每一个微批次超过水印时间后更新结果表。如果您的业务规则可以包含水印计算,那么也可以使用它。
这是很好的通过api的细节,输出模式和水印的使用在这里输入链接说明这将有助于选择正确的组合。

相关问题