我正在尝试将数据从 Amazon Kinesis Data Firehose 推送到 Amazon Simple Storage Service (Amazon S3)。但是,我注意到 Kinesis Data Firehose 在我的 Amazon S3 存储桶中创建了许多小文件。为什么会发生这种情况?
简短描述
Kinesis Data Firehose 提供的记录比指定的要小(在 BufferingHints API 中),原因如下:
- 已启用压缩。
- Kinesis Data Firehose 传输流已扩展。
- Amazon Kinesis Data Streams 被列为数据来源。
解决方法
已启用压缩
如果 Kinesis Data Firehose 传输流启用了压缩,则在压缩之前,将应用两个 BufferingHints 参数。检查 SizeInMBs 和 IntervalInSeconds 参数以确认。
缓冲每批记录后,将应用参数。当数据记录被缓冲和压缩后,将在 Amazon S3 中创建较小的文件。
Kinesis Data Firehose 传输流已扩展
如果请求了限制增加或 Kinesis Data Firehose 已自动扩展,则 Data Firehose 传输流可以扩展。默认情况下,Kinesis Data Firehose 会自动将传输流扩展到一定限制。Amazon Kinesis 的自动扩展行为降低了实施限流而不需要增加限制的可能性。
当 Kinesis Data Firehose 的传输流扩展时,它可能会对 Data Firehose 的缓冲提示产生影响。
注意:BufferSize 是在配置 Kinesis Data Firehose 时设置的。
Kinesis Data Firehose 传输流中还有按比例数量的并行缓冲,在这些数据流中,从所有这些缓冲区同时传输数据。例如,Kinesis Data Firehose 可以缓冲数据并根据缓冲区大小限制创建单个文件。如果 Kinesis Data Firehose 扩展为当前吞吐量限制的两倍,则两个单独的通道将在同一时间间隔内创建文件。如果 Kinesis Data Firehose 纵向扩展至四倍,则在同一时间间隔内,将有四个不同的通道在 S3 中创建四个文件。
注意:内部创建的通道数量将取决于 Kinesis Data Firehose。上面的示例中创建了四个通道。
检查以确保 Kinesis Data Firehose 传输流的扩展未超过默认限制。要查看 Kinesis Data Firehose 传输流的当前限制,请查看以下 Amazon CloudWatch 指标:
- BytesPerSecondLimit
- RecordsPerSecondLimit
- PutRequestsPerSecondLimit
如果这些指标的值与默认配额限制不同,则表示 Kinesis Data Firehose 的传输流已扩展。
Kinesis 数据流被列为数据来源
当 Kinesis 数据流被列为 Kinesis Data Firehose 的数据来源时,Kinesis Data Firehose 会在内部扩展。默认情况下,Kinesis Data Firehose 会尝试满足 Kinesis 数据流的卷容量。这种扩展会导致缓冲区大小发生变化,并可能导致传输较小的记录。
**注意:**缓冲提示选项被视为提示。因此,Kinesis Data Firehose 可能会选择使用不同的值来优化缓冲。