ホーム 疎結合・イベント駆動アーキテクチャ

Kinesis — Data Streams・Firehose・Data Analyticsの使い分け

Kinesis Data Streamsのシャード設計とスループット計算、リアルタイム処理とバッチ配信の違い、SQS/SNSとの使い分けを解説します。

最終更新: 2026-07-28 カテゴリ: 疎結合・イベント駆動アーキテクチャ

大量のストリーミングデータをリアルタイムに処理する場合、SQS/SNSとは異なる特性を持つ Kinesisファミリーが適しています。本記事ではその使い分けを整理します。

SAA レベル:基礎概念

Kinesisファミリーの役割分担

サービス役割
Kinesis Data Streamsリアルタイムのストリームデータ収集・カスタム処理
Kinesis Data FirehoseストリームデータをS3/Redshift/OpenSearch等へ自動配信(ETL含む)
Kinesis Data AnalyticsSQLまたはApache Flinkでストリームデータをリアルタイム分析

SAA 試験のポイント

Kinesis Data Streamsは消費者が自分でコードを書いて処理する必要がありますが、Firehoseは宛先を指定するだけで自動的に配信してくれるマネージド度の高いサービスです。「カスタムのリアルタイム処理ロジックが必要か」「単純に宛先へ流し込みたいだけか」が選定の分かれ目になります。

シャードの基本

  • Kinesis Data Streamsのスループット単位はシャード
  • 1シャードあたり: 書き込み1MB/秒または1000レコード/秒、読み取り2MB/秒

SAP レベル:高度な設計シナリオ

シャード設計とスループット計算

SAP 試験のポイント

必要なシャード数は、想定される書き込みスループット(MB/秒)と読み取りスループット(コンシューマー数×MB/秒)の両方から逆算する必要があります。SAPでは「1秒あたり5MBの書き込みと、3つの独立したコンシューマーアプリケーションがそれぞれ全量を読み取る」といった具体的な要件から、必要シャード数を計算させる問題が出題されることがあります。

必要シャード数(書き込み観点) = 想定書き込みMB/秒 ÷ 1MB/秒 必要シャード数(読み取り観点) = (コンシューマー数 × 想定読み取りMB/秒) ÷ 2MB/秒 → 大きい方の値を採用

Enhanced Fan-Outによる読み取り性能の改善

SAP 試験のポイント

複数のコンシューマーアプリケーションが同じシャードを読み取る場合、標準的な仕組み(ポーリングベース)では2MB/秒の読み取り容量を全コンシューマーで共有することになり、コンシューマー数が増えるほど1つあたりのスループットが低下します。Enhanced Fan-Outを有効にすると、各コンシューマーが専用の2MB/秒の読み取りスループットを(HTTP/2のプッシュ型で)確保でき、コンシューマー数が増えてもボトルネックになりません。

リアルタイム処理とバッチ配信の違い

観点Kinesis Data Streams(カスタム処理)Kinesis Data Firehose
レイテンシミリ秒〜秒単位でリアルタイム処理可能バッファリングによる遅延あり(数十秒〜数分)
処理の柔軟性完全にカスタムのコンシューマーロジック変換Lambdaの組み込みは可能だが基本は配信特化

設計上の落とし穴

「とにかくリアルタイム性が必要だからKinesis Data Streamsを使う」という判断だけでなく、SAPではS3やRedshiftへの単純な配信・保存が目的であれば、より運用負荷の低いFirehoseで十分というコスト・運用効率の観点からの判断も問われます。過剰にカスタムなStreams実装を選ぶことが、常に正解とは限りません。

SQS/SNSとの使い分け

  • 順序性のある大量のイベントストリームを、複数の異なるコンシューマーが独立して繰り返し読み取りたい(リプレイ性が必要) → Kinesis Data Streams
  • 単発のタスクを1回だけ確実に処理させたい → SQS
  • 複数の疎結合なシステムに同時通知したいだけ(大量ストリームではない) → SNS/EventBridge

まとめ

  • SAA: Kinesis Data Streams・Firehose・Data Analyticsの役割分担、シャードの基本スループット単位を理解する。
  • SAP: シャード数の計算、Enhanced Fan-Outによる複数コンシューマー時のスループット確保、Firehoseとの使い分け判断ができる。

次は **API Gateway設計(REST/HTTP/WebSocket)**を見ていきましょう。