Amazon Kinesis で構築するリアルタイムデータパイプライン - Data Streams と Data Firehose の使い分け
Data Streams でリアルタイムデータを取り込み、Data Firehose で S3・Redshift・OpenSearch に自動配信する。シャード設計とオンデマンドモードの使い分けでストリーミングパイプラインを構築する方法を解説します。
Kinesis の概要
Kinesis はリアルタイムストリーミングデータの収集・処理・分析を提供するサービス群です。Data Streams はカスタムコンシューマーによるリアルタイム処理、Data Firehose は S3 や Redshift への自動配信、Managed Apache Flink はストリームデータへの SQL/Flink 処理を提供します。
Data Streams と Firehose の使い分け
Data Streams はシャード単位でスループットを管理し、Lambda や KCL (Kinesis Client Library) でカスタム処理を実装します。サブ秒のレイテンシが必要なリアルタイムアラートや、複数のコンシューマーが同じストリームを読む場合に適しています。Data Firehose はプロデューサーからのデータを自動的にバッファリングし、S3、Redshift、OpenSearch、Splunk に配信します。配信前にデータ変換 (Lambda) やフォーマット変換 (Parquet) を適用でき、コンシューマーの実装が不要です。ログの集約と分析基盤への配信には Firehose が最適です。
Data Streams の設計パターン
Data Streams のシャード数はスループット要件で決定します。 1 シャードは書き込み 1 MB/秒 (1,000 レコード/秒)、読み取り 2 MB/秒を提供します。オンデマンドモードではシャード数が自動調整され、プロビジョンドモードでは手動で設定します。パーティションキーの設計でデータの分散を制御し、ホットシャード (特定シャードへの偏り) を防止します。拡張ファンアウトを有効にすると、コンシューマーごとに専用の 2 MB/秒の読み取りスループットが割り当てられ、複数のコンシューマーが互いに影響せずにデータを処理できます。 KCL (Kinesis Client Library) はシャードのリバランスとチェックポイントを自動管理し、コンシューマーアプリケーションの開発を簡素化します。 Kinesis について体系的に学びたい方は、関連書籍 (Amazon)も参考になります。
Kinesis の料金最適化
Data Streams のプロビジョンドモードはシャード時間 (約 0.015 ドル/時) と PUT ペイロードユニット (25KB 単位、100 万ユニットあたり約 0.014 ドル) で課金されます。オンデマンドモードはデータ取り込み量 (1 GB あたり約 0.08 ドル) と読み取り量で課金され、トラフィックが変動するワークロードに適しています。Data Firehose は取り込みデータ量 (1 GB あたり約 0.029 ドル) のみの課金で、シャード管理が不要です。レコードの集約 (複数の小さなレコードを 1 つの PUT にまとめる) で PUT ペイロードユニット数を削減し、Data Streams のコストを最適化します。データ保持期間をデフォルトの 24 時間から延長すると追加料金が発生するため、リプレイ要件に応じて最小限に設定します。
まとめ
Kinesis はリアルタイムストリーミングデータの処理基盤です。Data Streams でカスタムリアルタイム処理を実装し、拡張ファンアウトで複数コンシューマーの並列処理を実現します。Data Firehose で S3 や Redshift への配信を自動化し、レコード集約で PUT ペイロードユニット数を削減してコストを最適化します。オンデマンドモードでシャード管理の運用負荷も排除できます。