如何将数据从 Amazon SQS 流式传输到 Amazon S3 中的文件

2024-03-31

如何快速创建从 Amazon SQS 读取 json 数据并将其保存在 s3 存储桶中的 avro 文件(可能是其他格式)中的机制,并按 json 消息中给定字段的日期和值进行分区?


你可以写一个AWS Lambda 函数由发送到 Amazon SQS 队列的消息触发。您负责编写该代码,因此答案是这取决于您的编码技能。

但是,如果单独处理每条消息,您最终会得到每条 SQS 消息一个 Amazon S3 对象,处理效率相当低。文件是否为 Avro 格式这一事实并不重要,因为每个文件都非常小。这会在处理文件时增加很多开销。

另一种选择是将消息发送到Amazon Kinesis 数据流,它可以按大小(例如每 5MB)或时间(例如每 5 分钟)将消息聚合在一起。这将导致 S3 中的对象更少、更大,但它们不会被分区,也不会采用 Avro 格式。

为了从 Avro 等柱状格式中获得最佳性能,将数据合并成更大的文件,处理效率更高。例如,您可以使用 Kinesis 来收集数据,然后使用每日 Amazon EMR 作业将这些文件合并到分区的 Avro 文件中。

所以,答案是:“这很简单,但你可能不想这样做。”

您的问题没有定义数据如何进入 SQS。如果您不想在消息到达后立即处理消息,而是愿意让数据在SQS中积累一段时间(例如 1 小时或 1 天),然后您可以编写一个程序来读取所有的消息并将它们输出到分区的 Avro 文件中。这使用 SQS 作为临时保存区域,允许数据在处理之前累积。然而,它将失去任何实时报告功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将数据从 Amazon SQS 流式传输到 Amazon S3 中的文件 的相关文章

随机推荐