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

上次更新时间:2020 年 11 月 10 日

我正在尝试将数据从 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 数据流被列为数据源。

解决方法

已启用压缩

如果 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 的缓冲提示产生影响。传输流的整体缓冲区大小 (SizeInMBs) 按比例反向扩展。例如,如果 Kinesis Data Firehose 的容量较原始缓冲区大小限制增加了两倍,则缓冲区大小将减半。如果 Kinesis Data Firehose 可扩展四倍,则缓冲区大小将减少到缓冲区总大小的四分之一。

Kinesis Data Firehose 传输流中还有按比例数量的并行缓冲,在这些数据流中,从所有这些缓冲区同时传输数据。例如,Kinesis Data Firehose 可以缓冲数据并根据缓冲区大小限制创建单个文件。如果 Kinesis Data Firehose 扩展为缓冲区限制的两倍,则两个单独的通道将在同一时间间隔内创建文件。如果 Kinesis Data Firehose 扩展至四倍,则在同一时间间隔内,将有四个不同的通道在 S3 中创建四个文件。

示例:计算数据流限制

作为另一个示例,考虑 Amazon Kinesis 数据流因素,该数据流具有初始吞吐量 (t),并以间隔 (x) 秒创建文件大小 (s)。现在,相同的 Kinesis Data Firehose 传输流(吞吐量为 4t)在同一时间间隔内创建一个文件(大小为 s/4)。还有四个并行缓冲区传输数据。因此,Kinesis Data Firehose 传输的数据继续保持大致相同的大小:

4 * (s/4) = s

考虑初始吞吐量 (t) 为 5 MB/秒的 Kinesis 数据流。Kinesis 流每隔 60 (x) 秒创建 40 MB 的文件:

4 * (40MB/4) = 40MB

如果 Kinesis 数据流扩展至 20 MB/秒(四倍),则该数据流将创建四个不同的文件,每个文件大约为 10 MB。因此,Kinesis Data Firehose 传输流提供的总数据大小约为 40 MB。

检查以确保 Kinesis Data Firehose 传输流的扩展未超过默认限制。要查看 Kinesis Data Firehose 传输流的当前限制,请查看以下 Amazon CloudWatch 指标:

  • BytesPerSecondLimit
  • RecordsPerSecondLimit
  • PutRequestsPerSecondLimit

如果这些指标的值与默认配额限制不同,则表示 Kinesis Data Firehose 的传输流已扩展。

Kinesis 数据流被列为数据源

当 Kinesis 数据流被列为 Kinesis Data Firehose 的数据源时,Data Firehose 会在内部扩展。默认情况下,Kinesis Data Firehose 会尝试满足 Kinesis 数据流的卷容量。这种扩展会导致缓冲区大小发生变化,并可能导致传输较小的记录。

注意:缓冲提示选项被视为提示。因此,Kinesis Data Firehose 可能会选择使用不同的值来优化缓冲。</p


这篇文章对您有帮助吗?


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