如何重播从 AWS Firehose 推送到 S3 的流数据?

How to replay in a stream data pushed to S3 from AWS Firehose?

有很多示例是如何通过 AWS Firehose 将数据存储到 S3 存储桶并并行传递到某些处理应用程序(如上图所示)。

但我找不到任何关于从 s3 存储桶重播此数据以防处理应用程序崩溃的良好做法。我们需要为它提供历史数据,我们在 s3 中有这些数据,但 Firehose 中还没有。

我可以考虑用 Firehose 或 Lambda 重播它,但是:

  1. Kinesis Firehose 无法使用存储桶
  2. Lambda 将需要反序列化 .parquet 文件以将其发送到 Firehose 或 Kinesis Data Stream。我对这种隐式反序列化感到困惑,因为 Firehose 明确地对其进行了序列化。

或者也许有一些其他方法可以将数据从 s3 放回到流中,我完全想念它?

编辑:如果我们将 运行 lambda 用于将记录推送到流,则可能需要朗姆酒超过 15 分钟。所以另一种选择是 运行 一个脚本在单独的 EC2 实例上执行它 运行s 。但是这种从 s3 中提取数据的方法看起来比使用 Firehose 将其存储在那里复杂得多,这让我认为应该有一些更简单的方法

困扰我的问题实际上是我期望一些更高级的序列化而不只是转换为 JSON(例如 Kafka 支持 AVRO)。

关于从 s3 存储桶中重播记录:这部分解决方案似乎比归档记录所需的解决方案复杂得多。因此,如果我们可以使用 Firehose 的开箱即用功能来存档流,为了重放它,我们将需要两个 lambda 函数和两个流。

  1. Lambda 1(将文件名推送到流)
  2. Lambda 2(为第一个流中的每个文件名激活,将记录从文件推送到第二个流)

手动触发第一个 lambda,扫描所有 s3 存储桶文件并将它们的名称写入第一个流。第二个 lambda 函数由每个事件触发,是带有文件名的流,读取文件中的所有记录并将它们发送到最终流。可以从中使用 Kinesis Data Analytics 或另一个 Lambda。

此解决方案预计每天生成多个文件,并且每个文件中有多个记录。

this solution, 类似,但在我的案例中目标是 Kinesis 而不是文章中的 Dynamo。