为什么 Kinesis Data Firehose 在 S3 中创建这么多小文件?

上次更新时间:2022 年 8 月 4 日

我正在尝试将数据从 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 参数。检查 SizeInMBsIntervalInSeconds 参数以确认。

缓冲每批记录后,将应用参数。当数据记录被缓冲和压缩后,将在 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 可能会选择使用不同的值来优化缓冲。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?