ストリーミングデータ処理の設計 - Kinesis によるリアルタイムデータパイプラインの構築

Amazon Kinesis Data Streams と Amazon Data Firehose (旧 Kinesis Data Firehose) を活用したストリーミングデータ処理の設計手法を解説し、Lambda 連携によるリアルタイムデータパイプラインの構築方法を紹介します。

リアルタイムデータ処理の需要と Kinesis の役割

IoT デバイスからのセンサーデータ、Web アプリケーションのクリックストリーム、金融取引のログ、ソーシャルメディアのフィードなど、リアルタイムに生成される大量のデータを即座に処理・分析する需要が急速に拡大しています。バッチ処理では数時間から数日のタイムラグが生じますが、ストリーミング処理ではデータ生成から数秒以内に分析結果を得られます。AWS のストリーミングデータ処理は、収集・配信・分析をそれぞれ担うフルマネージドサービスを組み合わせて構成します。データストリームの基盤が Amazon Kinesis Data Streams、宛先への配信が Amazon Data Firehose、ストリーミングデータの分析が Amazon Managed Service for Apache Flink です。配信サービスは旧称が Amazon Kinesis Data Firehose、分析サービスは旧称が Amazon Kinesis Data Analytics で、現在 Kinesis の名前を残しているのは Data Streams と Video Streams です。旧 Kinesis Data Analytics の SQL アプリケーションは提供終了が段階的に進められており、2026 年 1 月 27 日以降はアプリケーションが削除されるため、新規の分析処理は Managed Service for Apache Flink で構成します。

Kinesis Data Streams によるデータ収集

Kinesis Data Streams は、大量のストリーミングデータをリアルタイムに収集・保持するサービスです。データストリームはシャードで構成され、各シャードは書き込みが秒間 1 MB または 1,000 レコード、読み取りが秒間 2 MB または 2,000 レコードまでをサポートします (2026 年 8 月時点・公式ドキュメント記載値)。バイト量に余裕があってもレコード数の上限に先に到達することがあるため、見積もりは両方の次元で行います。オンデマンドモードでは、トラフィックに応じてシャード数が自動的にスケーリングされ、キャパシティプランニングが不要になります。新規に作成したストリームは書き込み 4 MB/秒・読み取り 8 MB/秒から始まり、トラフィックの増加に応じて上限が自動的に引き上げられます (到達できる上限値はリージョンによって異なります)。プロビジョンドモードでは、シャード数を明示的に指定してコストを最適化できます。データの保持期間は既定かつ最短が 24 時間で、最大 8760 時間 (365 日) まで延長できます。24 時間を超える分は保持料金が別途かかります。Kinesis Producer Library (KPL) を使用すれば、レコードの集約とバッファリングにより、プロデューサー側のスループットを最大化できます。拡張ファンアウト機能により、コンシューマーごとに専用の読み取りスループット (シャードあたり 2 MB/秒) が確保され、複数のコンシューマーが同一ストリームを並行して処理できます。拡張ファンアウトを使わない共有型のコンシューマーはシャードあたり 2 MB/秒を分け合うため、コンシューマーを増やすと 1 つあたりの帯域が細くなり、伝播遅延も伸びます。登録できる拡張ファンアウトのコンシューマー数はデータストリームあたり 20 個、オンデマンド Advantage モードでは 50 個です (2026 年 8 月時点・公式ドキュメント記載値)。拡張ファンアウトにはデータ取得料金が別途かかります。

Lambda 連携によるサーバーレスストリーム処理

Kinesis Data Streams と Lambda の統合は、サーバーレスなストリーム処理パターンとして広く採用されています。 Lambda はイベントソースマッピングにより、 Kinesis ストリームからレコードを自動的にポーリングし、バッチ単位で Lambda 関数に渡します。バッチサイズ、バッチウィンドウ、並列化係数を調整することで、スループットとレイテンシのバランスを最適化できます。並列化係数を設定すれば、単一シャードに対して複数の Lambda インスタンスが並行処理を行い、処理能力を向上させます。エラーハンドリングでは、 bisect on function error 機能により、失敗したバッチを自動的に二分割してリトライし、問題のあるレコードを特定します。処理に失敗したレコードは SQS デッドレターキューに送信でき、後続の調査と再処理が可能です。フィルタリング機能を使えば、 Lambda 関数に渡す前にレコードを条件でフィルタリングし、不要なレコードの処理を回避できます。 Lambda のイベントソースマッピングでフィルタリングを設定する CLI 例: aws lambda create-event-source-mapping --function-name process-orders --event-source-arn arn:aws:kinesis:ap-northeast-1:123456789012:stream/orders --starting-position LATEST --batch-size 100 --maximum-batching-window-in-seconds 5 --filter-criteria "{"Filters":[{"Pattern":"{\"data\":{\"event_type\":[\"ORDER_PLACED\"]}}"}]}" で ORDER_PLACED イベントのみを Lambda に渡し、不要なレコードの処理を回避してコストを最適化します。

Data Firehose による配信と S3 連携

Amazon Data Firehose は、ストリーミングデータを S3、Redshift、OpenSearch、Splunk などの宛先に自動配信するサービスです。データの受信からバッファリング、変換、圧縮、配信までを完全に自動化し、コンシューマーアプリケーションの開発が不要になります。バッファリングのヒントとしてバッファサイズとバッファ間隔を設定し、配信の頻度とバッチサイズを制御できます。設定できる範囲は宛先ごとに異なり、S3 宛先ではバッファサイズが 1 - 128 MB (既定 5 MB)、バッファ間隔が 0 - 900 秒 (既定 300 秒) です (2026 年 8 月時点・公式ドキュメント記載値)。バッファ間隔を 60 秒未満にすると Firehose はマルチパートアップロードで配信するため、S3 の PUT リクエスト料金が増えます。バッファ間隔 0 秒のゼロバッファリングはアプリケーション宛先でのみ利用でき、S3 のバックアップ宛先と動的パーティショニングでは利用できません。バックアップ宛先のバッファ間隔は 60 - 900 秒です。データ変換機能では、Lambda 関数を使用して配信前にレコードのフォーマット変換、フィルタリング、エンリッチメントを実行できます。変換用のバッファリングヒントはサイズが 0.2 - 3 MB (既定 1 MB)、間隔が 0 - 900 秒 (既定 60 秒) で、Lambda の同期呼び出しのペイロード上限 6 MB を超えない設定にします。S3 への配信では、Parquet や ORC 形式への自動変換が可能で、Athena や Redshift Spectrum での分析に最適化されたデータレイクを構築できます。動的パーティショニング機能により、レコードの内容に基づいて S3 のプレフィックスを動的に決定し、効率的なデータ整理を実現します。

Kinesis の料金

以下の単価は 2026 年 8 月時点のバージニア北部 (us-east-1) と東京 (ap-northeast-1) の公表値です。Kinesis Data Streams のオンデマンドモードは、データ取り込みが 1 GB あたりバージニア北部 0.08 ドル・東京 0.104 ドル、GetRecords による取得が 1 GB あたりバージニア北部 0.04 ドル・東京 0.052 ドルで、さらにストリーム時間あたりバージニア北部 0.04 ドル・東京 0.052 ドルが加算されます。プロビジョンドモードは 1 シャード時間あたりバージニア北部 0.015 ドル・東京 0.0195 ドルで、トラフィックの有無にかかわらずシャード数ぶんが課金されます。24 時間を超えるデータ保持と拡張ファンアウトは別課金です。オンデマンドモードの場合、7 日以内の延長保持が 1 GB 月あたりバージニア北部 0.10 ドル・東京 0.12 ドル、7 日を超える長期保持が同じ単位でバージニア北部 0.023 ドル・東京 0.025 ドル、拡張ファンアウトによるデータ取得が 1 GB あたりバージニア北部 0.05 ドル・東京 0.065 ドルです。Amazon Data Firehose の取り込み料金は使用量に応じて逓減する段階制 (第 1 段階 = 月間 512,000 GB まで・第 2 段階 = 2,048,000 GB まで・第 3 段階 = それ以上。両リージョン共通) で、1 GB あたりバージニア北部が第 1 段階 0.029 ドル・第 2 段階 0.025 ドル・第 3 段階 0.020 ドル、東京が第 1 段階 0.036 ドル・第 2 段階 0.031 ドル・第 3 段階 0.025 ドルです。形式変換や動的パーティショニング、VPC 内の宛先への配信を使う場合は、それぞれ別の課金項目が加わります。MSK (Kafka) と比較すると、Kinesis は AWS サービスとのネイティブ統合が豊富で、ブローカーのサイジングやパッチ適用といった運用作業を抱えずに済む点が選定理由になります。既存の Kafka クライアントや Kafka Connect、Kafka Streams を前提とする場合や、Kafka 互換の API が要件に含まれる場合は MSK を選択します。

まとめ

Kinesis Data Streams と Amazon Data Firehose、Managed Service for Apache Flink を組み合わせることで、ストリーミングデータの収集から処理、配信、分析までをフルマネージドで構成できます。Data Streams のオンデマンドモードにより、キャパシティプランニング不要でスケーラブルなデータ収集が実現します。Lambda との統合によるサーバーレスストリーム処理は、インフラ管理なしでリアルタイムデータの変換・分析を可能にします。Data Firehose は S3 への自動配信と Parquet 変換により、分析に最適化されたデータレイクの構築を自動化します。リアルタイムデータ処理基盤の構築を目指す組織にとって、Data Streams を中核に据えたこの組み合わせが出発点になります。

参考資料 (AWS 公式)

本ページの一次情報は AWS 公式サイトおよび公式ドキュメントです。最新の仕様 / 料金は次の公式ページで確認できます。

本ページと公式ドキュメントの記述が食い違う場合は、公式ドキュメントを正としてください。