Spark结构化流实时聚合
Spark structured streaming real-time aggregation
是否可以在聚合时间window结束之前,在每个触发器上输出聚合数据?
上下文: 我正在开发一个应用程序,它从 Kafka 主题读取数据,处理数据,在 1 小时内聚合数据 window,然后输出到 S3。然而,Spark 应用程序可以理解地仅在给定小时结束时将聚合数据输出到 S3 window。
问题在于,S3 中聚合数据的最终用户只能有半实时视图,因为他们总是迟到一个小时,等待下一个聚合从 spark 应用程序输出。
将聚合时间 window 减少到小于一个小时肯定会有所帮助,但会生成更多数据。
如何使用最少的资源实现我所说的实时聚合?
这是一个有趣的建议,我确实有一个建议,但我不确定这是否真的符合您的最低标准。无论如何我都会描述解决方案...
如果最终目标是让用户能够实时查询数据(或者换句话说,更快的分析),那么实现这一目标的一种方法是在您的架构中引入一个可以快速处理的数据库 inserts/updates - 键值存储或面向列的数据库。下图可能会帮助您形象化:
这个想法很简单 - 只需不断将数据提取到第一个数据库中,然后在特定时间后继续将数据卸载到 S3 中,即一小时或一天,具体取决于您的要求。然后,您可以将这两个存储层的元数据注册到一个元数据层(例如 AWS Glue)中——如果您不需要持久元存储,这可能并不总是必要的。最重要的是,您可以使用 Presto 之类的东西来查询这两个商店。这也将使您能够优化这 2 个数据存储的存储。
您显然需要将流程构建到 drop/delete 您将流式传输到的存储中的数据分区,并将数据移动到 S3。
此模型称为分层存储模型或具有滑动 window 模式的分层存储模型 - Reference Article from Cloudera。
希望对您有所帮助!
是否可以在聚合时间window结束之前,在每个触发器上输出聚合数据?
上下文: 我正在开发一个应用程序,它从 Kafka 主题读取数据,处理数据,在 1 小时内聚合数据 window,然后输出到 S3。然而,Spark 应用程序可以理解地仅在给定小时结束时将聚合数据输出到 S3 window。
问题在于,S3 中聚合数据的最终用户只能有半实时视图,因为他们总是迟到一个小时,等待下一个聚合从 spark 应用程序输出。
将聚合时间 window 减少到小于一个小时肯定会有所帮助,但会生成更多数据。
如何使用最少的资源实现我所说的实时聚合?
这是一个有趣的建议,我确实有一个建议,但我不确定这是否真的符合您的最低标准。无论如何我都会描述解决方案...
如果最终目标是让用户能够实时查询数据(或者换句话说,更快的分析),那么实现这一目标的一种方法是在您的架构中引入一个可以快速处理的数据库 inserts/updates - 键值存储或面向列的数据库。下图可能会帮助您形象化:
这个想法很简单 - 只需不断将数据提取到第一个数据库中,然后在特定时间后继续将数据卸载到 S3 中,即一小时或一天,具体取决于您的要求。然后,您可以将这两个存储层的元数据注册到一个元数据层(例如 AWS Glue)中——如果您不需要持久元存储,这可能并不总是必要的。最重要的是,您可以使用 Presto 之类的东西来查询这两个商店。这也将使您能够优化这 2 个数据存储的存储。
您显然需要将流程构建到 drop/delete 您将流式传输到的存储中的数据分区,并将数据移动到 S3。
此模型称为分层存储模型或具有滑动 window 模式的分层存储模型 - Reference Article from Cloudera。
希望对您有所帮助!