跳至内容

为什么 Firehose 会在 Amazon S3 中创建多个小文件?

1 分钟阅读
0

当我将数据从 Amazon Data Firehose 推送到 Amazon Simple Storage Service (Amazon S3) 时,Firehose 会在我的 S3 存储桶中创建小文件。

简短描述

由于以下原因,Firehose 传输的记录会小于 BufferingHints API 指定的记录:

  • 您启用了压缩。
  • Firehose 传输流进行了扩展。
  • 您将 Amazon Kinesis Data Streams 列为了数据源。

解决方法

您启用了压缩

如果您为 Firehose 传输流启用压缩,则 Firehose 会在压缩之前应用 BufferingHints API 的 SizeInMBsIntervalInSeconds 参数。

在每批记录缓冲完成之后,Firehose 会应用这些参数。然后,Firehose 会压缩数据记录并在 Amazon S3 中创建小文件。

Firehose 传输流进行了扩展

如果您请求增加配额或 Firehose 自动扩展,则 Firehose 传输流会进行扩展。默认情况下,Firehose 会自动将传输流扩展至特定配额。这种自动扩缩行为可在不增加配额的情况下减少节流。

当 Firehose 传输流扩展时,BufferingHints API 可能会受到影响。

**注意:**当配置 Firehose 时,您可以设置缓冲区大小。

在 Firehose 传输流中,Firehose 会在并行通道中缓冲数据并同时传输数据。例如,Firehose 会根据缓冲区大小配额缓冲数据并创建单个文件。如果 Firehose 扩展至当前吞吐量配额的两倍,则在同一时间间隔内,会有两个独立的通道创建文件。如果 Firehose 扩展至四倍,则在同一时间间隔内,会有四个不同的通道在 Amazon S3 中创建四个文件。

当传输流扩展时,如果扩展系数与传入流量不匹配,Firehose 会创建较小的文件。例如,如果 Firehose 扩展至原始容量的四倍,且传入流量也增加至原始流量的四倍,则文件大小将保持一致。但是,当 Firehose 扩展四倍但流量保持不变时,Firehose 会将相同的数据量分配到更多通道中。然后,文件大小会变小。

**注意:**在这两种情况下,由于存在多个并行缓冲通道,文件数量可能会增加。

确保 Firehose 传输流不会扩展超过默认配额。要查看您的 Firehose 传输流的当前配额,请查看以下 Amazon CloudWatch 指标

  • BytesPerSecondLimit
  • RecordsPerSecondLimit
  • PutRequestsPerSecondLimit

如果这些指标的值与默认配额不同,则表明 Firehose 传输流已进行了扩展。

您将 Kinesis Data Streams 列为了数据源

当您将数据流列为 Firehose 的数据源时,Firehose 会在内部进行扩展。默认情况下,Firehose 会进行扩展以满足数据流的容量需求。当 Firehose 扩展时,缓冲区大小会发生变化,这可能导致传输较小的记录。

**注意:**Firehose 会将缓冲提示选项视为提示。因此,Firehose 可能会选择使用不同的值来优化缓冲区。

AWS 官方已更新 8 个月前