使用Flink在DynamoDB表中汇总电影租借信息

问题描述 投票:-1回答:1

大家节日快乐!

tl; dr:我需要聚合存储在一个DynamoDB表中的电影租赁信息,并将聚合的运行总计存储在另一张表中。如何确保一次聚合?

我目前将电影租借信息存储在名为MovieRentals的DynamoDB表中:{电影标题,租借期限,订单日期,租金金额}

我们每天有数百万部电影出租。我们的Web应用程序需要显示任何给定电影标题的合计租金金额。

我计划使用Flink在MovieRental DynamoDB流上按movie_title汇总租金金额,并将汇总的租金金额存储在另一个名为RentalAmountsByMovie的DynamoDB表中:{movie_title,total_rental_amount}

我如何确保RentalAmountsByMovie金额始终准确。即,如何防止任何检查点的结果不多次更新RentalAmountsByMovie表记录?

  1. 方法1:我将检查点ID存储在RentalAmountsByMovie表中,并进行条件更新以处理上述情况吗?
  2. 方法2:我可能可以实现使用DynamoDB事务的TwoPhaseCommitSinkFunction。但是,根据Flink文档,可以多次调用commit函数,因此需要幂等。因此即使此解决方案也需要将检查点ID存储在目标数据存储中
  3. 方法3:另一个模式似乎是仅将时间窗口聚合结果存储在RentalAmountsByMovie表中:{movie_title,rental_amount_for_checkpoint,checkpoint_id}。这样,从Flink到DynamoDB的写入将是幂等的(Flink不会进行任何更新,它只是在插入目标DDB表。 。我不喜欢此解决方案对Web应用程序的延迟影响。

  4. 方法4:可以使用Flink的Queryable状态功能。但是,该功能似乎在Beta中:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/stream/state/queryable_state.html

我想这是一个非常常见的聚合用例。 人们通常如何在Flink外部接收器中处理更新的汇总结果?>]

我感谢任何指针。如果需要,很高兴提供更多详细信息。

谢谢!

大家节日快乐! tl; dr:我需要聚合存储在一个DynamoDB表中的电影租赁信息,并将聚合的运行总计存储在另一张表中。如何确保...

amazon-dynamodb aggregate apache-flink flink-streaming amazon-dynamodb-streams
1个回答
0
投票

通常,您担心的问题不是问题,因为人们正在使用幂等写入来捕获外部接收器中的汇总结果。

© www.soinside.com 2019 - 2024. All rights reserved.