如何回放由AWS Firehose推送到S3的流数据?

5

pipeline 有很多关于AWS Firehose将数据存储到S3桶并同时传递给某些处理应用程序的示例(如上图所示)。

但是,我找不到任何关于在处理应用程序崩溃时从s3桶中回放此数据的良好实践。我们需要向其提供历史数据,这些数据已经不在Firehose中,但我们在s3中拥有它。

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

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

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

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

1个回答

5
我遇到的问题实际上是我期望有比仅转换为JSON更高级的序列化方式(例如,Kafka支持AVRO)。
关于从s3存储桶中重播记录:这部分解决方案似乎比存档记录所需的解决方案要复杂得多。因此,如果我们可以使用Firehose的开箱即用函数对流进行归档,那么我们将需要两个Lambda函数和两个流来重放它。
1. Lambda 1(将文件名推送到流式处理器) 2. Lambda 2(为第一个流中的每个文件名激活,将记录从文件中推送到第二个流)
第一个Lambda手动触发,扫描所有S3存储桶文件并将它们的名称写入第一个流。第二个Lambda函数由流中每个带有文件名事件的触发器触发,读取文件中的所有记录并将它们发送到最终流。可以通过Kinesis数据分析或另一个Lambda消耗该流。
此解决方案期望每天生成多个文件,并且每个文件中有多个记录。
类似于此解决方案,但是在我的情况下,目标是Kinesis而不是文章中的Dynamo。(参考链接)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接