Firehose 数据管道限制

Firehose datapipeline limitations

我的用例如下: 我有 JSON 数据进来,需要以镶木地板格式存储在 S3 中。到目前为止一切顺利,我可以在 Glue 中创建一个模式并将 "DataFormatConversionConfiguration" 附加到我的 firehose 流。但是数据来自不同的 "topics"。每个主题都有一个特定的 "schema"。根据我的理解,我将不得不创建多个 firehose 流,因为一个流只能有一个模式。但是我有数以千计的此类主题,并且有大量高吞吐量的数据传入。创建这么多流水资源看起来不可行(https://docs.aws.amazon.com/firehose/latest/dev/limits.html)

我应该如何构建管道。

海事组织你可以:

  • 要求升级您的 Firehose 限制并使用 1 Firehose/stream + 添加 Lambda 转换以将数据转换为通用模式 - IMO 不符合成本效益,但您应该看到你的负担。

  • 为每个 Kinesis 数据流创建一个 Lambda,将每个事件转换为由单个 Firehose 管理的模式,最后可以使用 Firehose API 将事件直接发送到您的 Firehose 流https://docs.aws.amazon.com/firehose/latest/APIReference/API_PutRecord.html (see "Q: How do I add data to my Amazon Kinesis Data Firehose delivery stream?" here https://aws.amazon.com/kinesis/data-firehose/faqs/) - 而且,在之前检查成本,因为即使您的 Lambda 被调用 "on demand",您也可能在很长一段时间内调用了很多。

  • 使用其中一种数据处理框架(Apache Spark、Apache Flink 等)并以 1 小时为单位从 Kinesis 读取数据,每次从您上次终止时开始 -->使用可用的接收器转换数据并将其写入 Parquet 格式。这些框架使用检查点的概念并将最后处理的偏移量存储在外部存储中。现在,如果您每小时重新启动它们,它们将开始直接从最后看到的条目读取数据。 - 它可能具有成本效益,特别是如果您考虑使用 spot 实例。另一方面,它需要比之前的 2 个解决方案更多的编码,并且显然可能具有更高的延迟。

希望对您有所帮助。您可以就所选解决方案提供反馈吗?