在自定义目录名称下将 Firehose 传输的文件存储在 S3 中

Posted

技术标签:

【中文标题】在自定义目录名称下将 Firehose 传输的文件存储在 S3 中【英文标题】:Storing Firehose transfered files in S3 under custom directory names 【发布时间】:2018-03-29 22:30:00 【问题描述】:

我们主要通过 Kinesis Firehose 服务批量传输传入的点击流数据。我们的系统是一个多租户 SaaS 平台。传入的点击流数据通过 Firehose 存储在 S3 中。默认情况下,所有文件都存储在以给定日期格式命名的目录下。我想通过 API 指定 Firehose 平面 \ 中数据文件的目录路径,以便隔离客户数据。

例如,我希望在 S3 中为客户 A、B 和 C 提供的目录结构:

/A/2017/10/12/

/B/2017/10/12/

/C/2017/10/12/

我该怎么做?

【问题讨论】:

【参考方案1】:

您可以通过配置 S3 前缀来分隔目录。在控制台中,这是在设置期间设置 S3 存储桶名称时完成的。

使用 CPI,您可以在 --s3-destination-configuration 中设置前缀,如下所示:

http://docs.aws.amazon.com/cli/latest/reference/firehose/create-delivery-stream.html

但是请注意,您只能为每个 Firehose 传输流设置一个前缀,因此如果您通过一个 Firehose 传输流传递所有点击流数据,您将无法将记录发送到不同的前缀。

【讨论】:

我想使用“前缀”作为变量,并根据传入的点击数据 [例如 click.customer_id] 对其进行配置。不过,感谢您的回答。 了解,但如果您使用单个 Firehose 传输流,您将无法写入不同的前缀,即使使用变量也是如此。就目前而言,无法将您的变量传递给交付流上的 S3 前缀配置。如果您想在一个存储桶中使用单独的前缀,则必须使用从同一个 Kinesis 流中读取的多个交付流,以及一个记录转换 Lambda 来过滤配置有交付流的给定前缀。【参考方案2】:

自定义前缀为now supported。

【讨论】:

这似乎不是一个解决方案,因为它没有提供基于事件值(例如客户 ID)创建文件夹的方法 这可能不是问题的答案,但最好注意一下。不过,“自定义前缀”对 AWS 来说有点误导,因为实际上它只是一组有限的基于时间戳或基于随机字符串的值,您可以从中进行选择。

以上是关于在自定义目录名称下将 Firehose 传输的文件存储在 S3 中的主要内容,如果未能解决你的问题,请参考以下文章

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

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

使用 Lambda 或 Kinesis Firehose 将 CloudWatch Logs 传输到 S3?

在自定义单元 iphone 中使用按钮传输变量

在 iOS 的后台模式下将数据从 Central 传输到外围设备

Centos7下将FTP用户锁定在指定目录的解决办法