AWS Firehose 到 S3 的内容前缀

Posted

技术标签:

【中文标题】AWS Firehose 到 S3 的内容前缀【英文标题】:AWS Firehose to S3 prefix by content 【发布时间】:2021-08-23 01:44:48 【问题描述】:

我有一个 Kinesis Firehose 流,其中生成了不同模式的 JSON。 由于这些数据最终应该由其他依赖架构(Glue、Athena)的工具访问,我想通过架构将它们分隔为某些 S3 存储桶中的不同前缀。

我不想为不同的架构使用不同的流。

例如,如果将以下 JSON 发送到流中

'a': 1, 'b': 2  # JSON 1
'a': 8, 'b': 5  # JSON 2
'c': 9  # JSON 3

我希望它们最终存储在 S3 存储桶中,如下所示

/mybucket/YYYY/MM/DD/HH/schema1/json1.json  # JSON 1
/mybucket/YYYY/MM/DD/HH/schema1/json2.json  # JSON 2
/mybucket/YYYY/MM/DD/HH/schema2/json3.json  # JSON 3

我确实事先知道所有可能的模式。

我应该怎么做?

【问题讨论】:

【参考方案1】:

很遗憾,你不能这样做。 S3 前缀是流级别设置,而不是记录设置。如果您不想拥有不同的流,则必须将 firehose 更改为常规 kinesis 数据流,它将所有记录定向到 lambda 函数。 lambda 函数将获取记录并将它们放在不同前缀下的 s3 存储桶中。

【讨论】:

【参考方案2】:

AWS 于 2021 年 9 月发布了 Kinesis Data Firehose 动态分区。此功能可以使用 JSON 中的一个或多个键/值来组成分区。

您可以查看此资源链接。

https://aws.amazon.com/about-aws/whats-new/2021/08/introducing-dynamic-partitioning-amazon-kinesis-data-firehose/

https://docs.aws.amazon.com/firehose/latest/dev/dynamic-partitioning.html

【讨论】:

以上是关于AWS Firehose 到 S3 的内容前缀的主要内容,如果未能解决你的问题,请参考以下文章

加载文件后如何清理 AWS Firehose 使用的 S3 文件?

AWS Firehose中间S3存储桶和传输流依赖关系出现问题

使用 AWS Firehose 时连接 s3 文件

将AWS Kinesis Firehose回填到Elasticsearch Service失败的记录

使用 AWS kinesis-firehose 将数据写入文件

将 AWS Kinesis Firehose 回填到 Elasticsearch Service 失败记录