当我将数据从 Amazon Data Firehose 推送到 Amazon Simple Storage Service (Amazon S3) 时,Firehose 会在我的 S3 存储桶中创建小文件。
简短描述
由于以下原因,Firehose 传输的记录会小于 BufferingHints API 指定的记录:
- 您启用了压缩。
- Firehose 传输流进行了扩展。
- 您将 Amazon Kinesis Data Streams 列为了数据源。
解决方法
您启用了压缩
如果您为 Firehose 传输流启用压缩,则 Firehose 会在压缩之前应用 BufferingHints API 的 SizeInMBs 和 IntervalInSeconds 参数。
在每批记录缓冲完成之后,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 可能会选择使用不同的值来优化缓冲区。