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

时间:2018-12-12 14:38:02

标签: amazon-web-services amazon-s3 amazon-kinesis amazon-kinesis-firehose

pipeline 有很多示例说明如何将数据由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存储在那里复杂得多,这使我认为应该有一些更简单的方法

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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