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 の両方のパラメータが圧縮の前に適用されます。SizeInMBs および IntervalInSeconds パラメータを確認します。

レコードの各バッチがバッファリングされた後、パラメータが適用されます。データレコードがバッファおよび圧縮されると、Amazon S3 に小さなファイルが作成されます。

Kinesis Data Firehose 配信ストリームが拡張されている

制限の引き上げが要求された場合、または Kinesis Data Firehose が自動的にスケールした場合、Data Firehose 配信ストリームはスケールできます。デフォルトでは、Kinesis Data Firehose は配信ストリームを一定の制限まで自動的にスケールします。Amazon Kinesis の自動スケーリング動作により、制限を引き上げることなく、スロットリングの発生可能性を低減できます。

Kinesis Data Firehose の配信ストリームがスケールすると、Data Firehose のバッファリングヒントに影響を及ぼす可能性があります。配信ストリームの全体的なバッファサイズ (SizeInMBs) は、反比例してスケールされます。たとえば、Kinesis Data Firehose の容量が元のバッファサイズ制限の 2 倍増加した場合、バッファサイズは半減します。Kinesis Data Firehose が最大 4 倍にスケールアップすると、バッファサイズは全体のバッファサイズの 4 分の 1 に縮小されます。

Kinesis Data Firehose 配信ストリームには比例した数の並列バッファリングがあり、これらのすべてのバッファからデータが同時に配信されます。たとえば、Kinesis Data Firehose はデータをバッファし、バッファサイズ制限に基づいて 1 つのファイルを作成できます。Kinesis Data Firehose がバッファ制限を 2 倍にスケールすると、2 つの別々のチャネルが同じ時間間隔でファイルを作成します。Kinesis Data Firehose が最大 4 倍にスケールアップすると、同じ時間間隔で 4 つの異なるチャネルが S3 に 4 つのファイルを作成します。

例: データストリーム制限の計算

別の例として、初期スループット (t) を持ち、間隔 (x) 秒単位でファイルサイズ (s) を作成する Amazon Kinesis データストリームを考えてみましょう。同じ Kinesis Data Firehose 配信ストリーム (スループットが 4t) は、同じ時間間隔でファイル (サイズは s/4) を作成します。また、データを配信する 4 つの並列バッファもあります。そのため、Kinesis Data Firehose によって配信されるデータは、ほぼ同じサイズのままです。

4 * (s/4) = s

5 MB/秒の初期スループット (t) を持つ Kinesis データストリームを考えてみましょう。Kinesis ストリームは、60 (x) 秒間隔で 40 MB のファイルサイズを作成します。

4 * (40MB/4) = 40MB

Kinesis データストリームを 20 MB/秒 (4 倍) にスケールアップすると、ストリームは 4 つの異なるファイル (それぞれ約 10 MB) を作成します。したがって、Kinesis Data Firehose 配信ストリームによって配信される合計データサイズは約 40 MB です。

Kinesis Data Firehose 配信ストリームが既定の制限を超えてスケールされていないことを確認します。Kinesis Data Firehose 配信ストリームの現在の制限を表示するには、次の Amazon CloudWatch メトリクスを確認してください。

  • BytesPerSecondLimit
  • RecordsPerSecondLimit
  • PutRequestsPerSecondLimit

これらのメトリクスの値がデフォルトのクォータ制限と異なる場合は、Kinesis Data Firehose の配信ストリームがスケールされたことを示します。

Kinesis Data Stream がデータソースとしてリストされる

Kinesis データストリームが Kinesis Data Firehose のデータソースとしてリストされている場合、Data Firehose は内部的にスケールします。デフォルトでは、Kinesis Data Firehose は Kinesis データストリームのボリューム容量を満たそうとします。このスケーリングにより、バッファリングサイズが変更され、より小さなサイズのレコードが配信される可能性があります。

注: バッファリングヒントオプションはヒントとして扱われます。そのため、Kinesis Data Firehose は、バッファリングを最適化するために異なる値を使用する場合があります。</p


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?