如何在流中重放从AWS Firehose推送到S3的数据?

Cha*_*fun 5 amazon-s3 amazon-web-services amazon-kinesis amazon-kinesis-firehose

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

但我找不到任何有关从 s3 存储桶重播此数据的良好实践,以防处理应用程序被破坏。我们需要向它提供历史数据,我们在 s3 中有这些数据,但 Firehose 中还没有这些数据。

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

  1. Kinesis Firehose 无法从存储桶中消耗
  2. Lambda 将需要反序列化 .parquet 文件才能将其发送到 Firehose 或 Kinesis Data Stream。我对这种隐式反序列化感到困惑,因为 Firehose 显式地对其进行了序列化。

或者也许还有其他方法可以将数据从 s3 放回到流中,而我完全错过了?

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

Cha*_*fun 5

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

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

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

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

该解决方案期望每天生成多个文件,并且每个文件中有多个记录。

与此解决方案类似,但在我的例子中,目标是 Kinesis,而不是本文中的 Dynamo。