Amazon Kinesis Data Streams
リアルタイムのデータストリーム
shard 単位で構成される耐久性のあるデータストリームで、保持期間(デフォルト 24 時間、最大 365 日まで延長可能)内であれば複数の consumer がデータを再読み込みできます。provisioned と on-demand のモードがあります。
- コスト$$ ふつう
- 難易度●●●●●
- 未使用でも課金?はい
- サーバーレス
- 出題試験SAA · DVA · SOA
たとえるなら連続録画テープのようなものです。複数の人が同じ場面を巻き戻して見られます。
いつ使う?
✓ 使うべき場面
低レイテンシーのリアルタイム処理で、複数のアプリケーションが同じストリームを読み、partition key ごとに順序を保つ必要があるとき。
✗ 避けるべき場面
S3/Redshift にデータを流し込むだけ → Data Firehose。シンプルなジョブキュー → SQS。
よくある使い方
- リアルタイムダッシュボード用の clickstream
- 複数 consumer 向けのログの一元収集
- Lambda で処理する IoT データ
料金はいくら?
- 課金方式: Provisioned: shard 時間と PUT payload unit に応じて課金。On-demand: ストリーム時間と書き込み/読み取りの GB 数に応じて課金されます。
provisioned の shard はデータがなくても時間課金されます。partition key が「ホット」になると ProvisionedThroughputExceeded エラーが発生します。
「複数のアプリケーションが同じデータを読み、再読み込み、キーごとの順序、リアルタイム」なら Kinesis Data Streams、「コンシューマーが増えて遅くなる」なら拡張ファンアウト、「負荷が予測不能でシャード管理をしたくない」ならオンデマンドモードを選びます。
よくある質問
シャードとは何で、なぜパフォーマンスに影響しますか?
シャードはストリームの容量単位で、シャードごとに書き込みと読み取りのスループット上限が決まっており、同じパーティションキーのレコードは順序を保つため常に同じシャードに入ります。特定のパーティションキーに偏る (ホットになる) と、他のシャードが空いていてもそのシャードがボトルネックになるため、均等に分散するキーを選びます。スループットを増やすにはシャード数を増やします (リシャーディング)。
プロビジョニングモードとオンデマンドモードの違いは?
プロビジョニングは、シャード数を自分で決めてシャード時間で課金され、負荷が予測できる場合に向きます。オンデマンドは、トラフィックに応じて AWS が自動でスケールし、データ量で課金されるため、シャード設計が不要で、負荷が変動する場合や不明な場合に向きます。どちらも設定した保持期間だけデータを保持します。
拡張ファンアウト (enhanced fan-out) はいつ使いますか?
デフォルトではコンシューマーが各シャードの読み取りスループットを共有するため、コンシューマーを増やすと互いに遅くなります。拡張ファンアウトは各コンシューマーに専用のプッシュ型読み取り経路を与え、低遅延になります。1 つのストリームを多数のコンシューマーが読む場合に向き、追加コストがかかります。KCL を使うコンシューマーはチェックポイント保存用に DynamoDB も必要です。
関連サービス
SAA-C03 対策
Kinesis Data Streams は次の対策モジュールで扱っています: