如何快速创建从Amazon SQS读取json数据并将其保存到s3存储桶中的avro文件(可能是其他格式)中的机制,并按json消息中给定字段的日期和值进行分区?
答案 0 :(得分:3)
您可以编写一个 AWS Lambda函数,该函数通过将消息发送到Amazon SQS队列而触发。您负责编写该代码,因此答案取决于它取决于您的编码技能。
但是,如果每条消息都是单独处理的,那么您最终会得到每个SQS消息一个Amazon S3对象,这对于处理效率非常低。该文件为Avro格式的事实无关紧要,因为每个文件都非常小。处理文件时,这会增加很多开销。
另一种选择是将消息发送到 Amazon Kinesis数据流,后者可以按大小(例如,每5MB)或时间(例如,每5分钟)将消息聚合在一起。这样可以减少S3中较大的对象,但它们不会被分区,也不会采用Avro格式。
要从Avro之类的列格式中获得最佳性能,请将数据合并到更大的文件中,以提高处理效率。因此,例如,您可以使用Kinesis收集数据,然后使用Amazon EMR的日常工作将这些文件合并为分区的Avro文件。
因此,答案是:“这很容易,但是您可能不想这样做。”
您的问题并未定义数据如何进入SQS。如果您希望在一段时间内(例如1小时或1天)愿意在SQS中积累数据,而不是立即处理它们,则可以编写一个程序读取所有消息,并将它们输出到分区的Avro文件中。这将SQS用作临时保存区域,从而允许在处理数据之前对其进行累积。但是,它将失去任何实时报告方面。