【问题标题】:Spark structured streaming real-time aggregationSpark结构化流式实时聚合
【发布时间】:2020-04-29 21:57:20
【问题描述】:

是否可以在聚合时间窗口结束之前,在每个触发器上输出聚合数据?

上下文:我正在开发一个应用程序,它从 Kafka 主题读取数据、处理数据、在 1 小时的窗口内聚合数据,然后输出到 S3。但是,可以理解的是,Spark 应用程序仅在给定小时窗口结束时才将聚合数据输出到 S3。

问题在于 S3 中聚合数据的最终用户只能有一个半实时的视图,因为他们总是迟到一个小时,等待从 spark 应用程序输出下一个聚合。

将聚合时间窗口减少到小于一小时肯定会有所帮助,但会产生更多数据。

如何使用最少的资源实现实时聚合?

【问题讨论】:

    标签: apache-spark spark-structured-streaming


    【解决方案1】:

    这是一个有趣的建议,我确实有一个建议,但我不确定这是否真的符合您的最低标准。无论如何,我会描述解决方案...

    如果最终目标是让用户能够实时查询数据(或者换句话说,更快的分析),那么实现这一目标的一种方法是在您的架构中引入一个可以处理快速插入/更新的数据库 - 要么键值存储或面向列的数据库。下面的图表可能有助于您将其可视化:

    这个想法很简单 - 只需继续将数据摄取到第一个数据库中,然后在特定时间后继续将数据卸载到 S3 中,即根据您的要求一个小时或一天。然后,您可以将这两个存储层的元数据注册到元数据层(例如 AWS Glue)中 - 如果您不需要持久元存储,这可能并不总是必要的。最重要的是,您可以使用 Presto 之类的东西来查询这两个商店。这也将使您能够跨这两个数据存储优化存储。

    您显然需要构建流程以从您将流式传输到的存储中删除/删除数据分区,并将数据移动到 S3。

    此模型称为分层存储模型或具有滑动窗口模式的分层存储模型 - Reference Article from Cloudera

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2019-02-17
      • 2018-01-23
      • 2018-02-23
      • 2018-07-20
      • 2019-10-23
      • 1970-01-01
      • 2017-05-04
      • 2018-05-27
      • 1970-01-01
      相关资源
      最近更新 更多