在自定义目录名称下将 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?