Amazon KinesisはAWSのリアルタイムデータストリーミングサービスです。Kinesis Data StreamsとKinesis Data Firehoseは似たような名前ですが、用途と特性が大きく異なります。適切なサービスを選択するための詳細な比較を解説します。
Kinesis Data Streamsの概要として、リアルタイムデータのストリーミングと処理に特化したサービスです。データはシャード単位で管理され、プロデューサーがデータを送信し、コンシューマー(EC2、Lambda、Kinesis Data Analytics等)がリアルタイムで処理します。デフォルトでは24時間(最大365日)データを保持します。
Kinesis Data Firehoseの概要として、ストリーミングデータをS3、Redshift、OpenSearch Service、Splunkなどのデスティネーションに自動配信するフルマネージドサービスです。データ変換(Lambda連携)、圧縮、暗号化を自動的に処理します。60秒〜15分のバッファリング間隔でデータをバッチ送信します。
主な違いとして、まずリアルタイム性があります。Kinesis Data Streamsはミリ秒単位のリアルタイム処理が可能です。Firehoseは最短60秒のバッファリングがあるため、厳密なリアルタイム処理には向きません。
次に管理の複雑さの違いがあります。Kinesis Data Streamsはシャード数の管理、コンシューマーの実装、スケーリングを手動で行う必要があります。Firehoseは完全マネージドで、シャードの概念なく自動スケーリングされます。
用途の違いとして、Kinesis Data Streamsが適しているケースは、株価・センサーデータなどのリアルタイム分析、複数のコンシューマーが同じデータを異なる方法で処理する場合、カスタムの複雑な処理ロジックが必要な場合、データ保持期間(数時間〜数日)が重要な場合です。
Firehoseが適しているケースは、S3やRedshiftへのデータ収集・蓄積、ログデータのElasticsearch/OpenSearchへの送信、シンプルなETL処理(変換・圧縮・暗号化)が必要な場合、管理オーバーヘッドを最小化したい場合です。
コスト比較として、Kinesis Data Streamsはシャード時間単位(1シャード1時間あたり$0.015)とペイロードユニット単位(PUT 1,000,000回あたり$0.014)で課金されます。Firehoseはデータ取り込み量(1GBあたり$0.029)とデータ変換(Lambda実行コスト)で課金されます。単純なデータ収集・蓄積用途では一般的にFirehoseの方がコスト効率が高いです。
AWS試験でのポイントとして、SAA-C03やDVA-C02でよく出題される区分です。「リアルタイム処理が必要」「複数コンシューマー」「カスタム処理」はStreams、「S3/Redshiftへの自動配信」「フルマネージド」「ログ収集」はFirehoseと覚えておくと問題を解きやすくなります。
実際のアーキテクチャ例として、IoTデバイスからのセンサーデータをKinesis Data Streamsで受信し、Lambda関数でリアルタイム異常検知を行いながら、Firehoseを通じてS3に長期保存するというハイブリッド構成がよく使われます。この構成でリアルタイム性とデータの永続化を両立できます。
Kinesis Data Streamsのシャードキャパシティについて、各シャードは1秒あたり最大1MBの書き込みと2MBの読み取りをサポートします。トラフィックが増加した場合はシャードを分割(シャードスプリット)してキャパシティを拡張します。シャード数はCloudWatch経由でモニタリングし、スロットリングが発生する前にスケールアップします。Kinesis Data StreamsのOn-demand mode(オンデマンドモード)を使用すると、シャード管理が不要になり自動スケーリングされますが、コストがやや高くなります。
Kinesis Data Firehoseのデータ変換機能として、Firehoseは送信前にLambda関数を使ったリアルタイムデータ変換をサポートしています。JSON形式への変換、データのフィルタリング、エンリッチメント(外部データソースからの情報付加)などが可能です。また、Parquet・ORC形式への変換機能も内蔵しており、S3に保存したデータをAthenaで効率的にクエリするための最適化が容易です。
Kinesis Data Analyticsとの連携として、Kinesis Data StreamsまたはFirehoseのデータをKinesis Data Analytics(SQL版またはApache Flink版)に入力して、リアルタイムの集計・フィルタリング・ウィンドウ処理を実行できます。処理結果を別のStreams、Firehose、またはLambdaに出力することで、複雑なリアルタイムデータパイプラインを構築できます。
コスト最適化のポイントとして、Kinesis Data Streamsではシャード数を最適化し、使用率が低い時間帯にシャード数を減らすことでコストを削減できます。Firehoseでは圧縮(gzip、Snappy)を有効にすることでS3ストレージコストを削減できます。データ変換のLambda関数コストも考慮に入れてトータルコストを試算することが重要です。
AWS試験での出題傾向として、SAA-C03では「リアルタイムデータ処理」「ストリーミングデータ」というキーワードに対してKinesisが答えになることが多いです。FirehoseはS3・Redshift・OpenSearchへの「自動配信」「フルマネージド」のキーワードで判断します。Streamsは「複数のコンシューマー」「カスタム処理」「データ保持」のキーワードで選択します。SQSとの使い分けも頻出で、SQSはメッセージキューイング(非同期処理)、Kinesis Streamsはデータストリーミング(順序を保ったリアルタイム処理)として区別します。
Kinesis vs SQS vs SNSの使い分けをまとめると、SQSは1つのコンシューマーがメッセージを処理する非同期処理(メッセージは1度だけ処理)に適しています。SNSはPub/Sub(1つのメッセージを複数のサブスクライバーに配信)に適しています。Kinesis Data Streamsは時系列データのストリーミングで複数のコンシューマーが同じデータを並列で処理する場合に適しています。これら3サービスの使い分けはAWS試験で頻繁に問われる重要なトピックです。
Kinesis Data Firehoseの新機能として、AWS Lambda連携によるデータ変換に加え、直接Apache IcebergテーブルへのS3書き込みもサポートされています。これにより、データレイクのモダン化が容易になっています。また、Firehoseはソースとして直接APIコール(PutRecord)、Kinesis Data Streams、Amazon MSK(Managed Streaming for Apache Kafka)からの取り込みに対応しています。
Kinesis関連サービスの料金最適化として、Kinesis Data Streamsのシャード時間コストを削減するため、需要の低い時間帯にシャード数をマージ(シャードマージ)することが有効です。Firehoseのコスト最適化では、バッファリングサイズを大きくすることで、データ取り込みのリクエスト数を減らしてコストを下げることができます。また、Firehoseの圧縮機能を有効にするとS3ストレージコストの削減につながります。
まとめとして、Kinesis Data StreamsとFirehoseはどちらもリアルタイムデータ処理に関わるサービスですが、用途・管理の複雑さ・コスト構造が異なります。「リアルタイム性が最優先で複雑なカスタム処理が必要」ならStreams、「マネージドに簡単にS3等へ配信したい」ならFirehoseという選択基準を覚えておくと、実務でも試験でも役立ちます。
