我的用例如下: 我有传入的JSON数据,需要以实木复合地板格式存储在S3中。到目前为止,到目前为止,我可以在Glue中创建一个架构并将“ DataFormatConversionConfiguration”附加到我的流水流中。但是数据来自不同的“主题”。每个主题都有特定的“模式”。根据我的理解,我将不得不创建多个firehose流,因为一个流只能有一个模式。但是我有成千上万个这样的主题,其中包含大量输入的高吞吐量数据。创建这么多firehose资源(https://docs.aws.amazon.com/firehose/latest/dev/limits.html)似乎不可行
我应该如何建立管道。
答案 0 :(得分:2)
IMO,您可以:
要求升级您的Firehose限制,并使用1个Firehose / stream进行所有操作,并添加Lambda转换以将数据转换为通用模式-IMO并不划算,但您应该随负载查看。
为每个Kinesis数据流创建一个Lambda,将每个事件转换为由单个Firehose管理的架构,最后可以使用Firehose API https://docs.aws.amazon.com/firehose/latest/APIReference/API_PutRecord.html将事件直接发送到您的Firehose流(请参见“问:如何将数据添加到我的Amazon Kinesis Data Firehose交付流中?” –在此https://aws.amazon.com/kinesis/data-firehose/faqs/)-但是,还要检查成本,因为即使您的Lambda是“按需”调用的,您也可能有很多它们会在很长一段时间内被调用。
使用一种数据处理框架(Apache Spark,Apache Flink等),并在每次上次终止时从1个小时开始分批从Kinesis中读取数据->使用可用的接收器转换数据并将其以Parquet格式写入。框架使用检查点的概念并将最后处理的偏移量存储在外部存储中。现在,如果您每小时重新启动它们,它们将开始直接从最后看到的条目中读取数据。 -这可能具有成本效益,特别是如果您考虑使用竞价型实例。另一方面,与以前的两个解决方案相比,它需要更多的编码,并且显然可能具有更高的延迟。
希望有帮助。您可以提供有关所选解决方案的反馈吗?