在近乎实时的分析中,为什么 Lambda-->Firehose-->S3 优于 Lambda-->S3?

In near real time analytics, why is Lambda-->Firehose-->S3 preferred over Lambda -->S3?

许多用于无服务器实时分析的 AWS 参考架构,建议通过 Kinesis Firehose 将处理后的数据从 Lambda 推送到 S3。

例如 https://aws.amazon.com/blogs/big-data/create-real-time-clickstream-sessions-and-run-analytics-with-amazon-kinesis-data-analytics-aws-glue-and-amazon-athena/

为什么不能直接从Lambda推送数据到S3?通过跳过中介 Kinesis Firehose 组件来避免复杂性和额外成本不是更好吗? Lambda直接写实时数据到S3有没有问题?

主要是因为Firehose可以让你批量处理数据。它将例如仅将 128mb 的数据文件写入 gzip 到 S3 中。它将收集传入数据,直到达到阈值,将其写入 S3 并等待下一个数据。如果您让 lambda 直接写入 S3,那么您将不得不自己进行批处理,如果您只有无状态的 lambda,这将非常困难。

也就是说,这主要适用于您的数据由许多记录/行组成的情况。另一方面,如果您基本上处理的是 lambda 输出的 50MB 数据块,那么您可以/应该直接写入 S3,因为批处理在您的情况下可能不可能或没有用。

您是否应该使用 firehose 仅​​取决于您拥有的数据/吞吐量以及可能存在的要求。

直接将实时数据写入S3的一个问题是,如果你想,例如用 Athena 查询它,如果你有数百万个几个字节大的文件而不是 100 个 10 MB 大的文件,你会遇到很多麻烦。