Amazon Kinesisシリーズの耐障害性を考える

# はじめに
この記事はDevOps on AWS大全の一部です。
DevOps on AWS大全の一覧は[こちら](https://qiita.com/tech4anyone/items/b06f88035d27c6ef13b2)。

この記事ではAmazon Kinesisシリーズを耐障害性の観点から超詳細解説しています。

具体的には以下流れで説明します。

- Amazon Kinesis Data Streamとは
- Amazon Kinesis Data Streamのスケーラビリティ
- Amazon Kinesis Data Firehoseとは
- Amazon Kinesis Data Firehoseのスケーラビリティ
- Amazon Kinesis Data Analyticsとは
- Amazon Kinesis Data Analyticsのスケーラビリティ
- Amazon Kinesisシリーズの比較

AWSの区分でいう「Level 200：トピックの入門知識を持っていることを前提に、ベストプラクティス、サービス機能を解説するレベル」の内容です。

# この記事を読んでほしい人
- Amazon Kinesisシリーズを採用するときのベストプラクティスを説明できるようになりたい人
- Amazon Kinesisシリーズの耐障害性に不安を感じている人
- AWS Certified DevOps Engineer Professionalを目指している人

# Amazon Kinesis Data Streams
## Amazon Kinesis Data Streamsとは
Amazon Kinesis Data Streamsは、リアルタイムで大量のデータを処理し、ストリーム処理アプリケーションを構築するためのサービスです。

![](https://storage.googleapis.com/zenn-user-upload/0510c435677a-20231125.png)

データはシャードと呼ばれるパーティションに分割され、各シャードで並行処理が可能です。
これにより、高いスループットと低いレイテンシでデータを受け取り、処理することができます。

Kinesis Data Streamsは、IoTセンサーデータ、ログ、トランザクションデータなど、様々なデータソースからのストリームデータを受信し、リアルタイムで分析・処理する際に効果的です。

## Amazon Kinesis Data Streamsのスケーラビリティ
Amazon Kinesis Data Streamsのスケーラビリティはシャード数の増減で実現します。
そして、シャード数はキャパシティモードと呼ばれる設定に基づいて管理されます。

なお、Amazon Kinesis Data Streamsでは、オンデマンドモードとプロビジョニングモードという2つのキャパシティモードが提供されています。

### オンデマンドモード
オンデマンドモードは、データストリームの作成時に事前のシャード数の指定が不要な柔軟なモードです。
シャードの数は自動的に調整され、データのスループットに応じてスケーリングされます。
これにより、変動するデータ量に対して瞬時に対応し、迅速にスケーリングできるため、予測困難なトラフィックパターンに適しています。

ただし、シャード数の自動スケーリングに伴い、コストも変動するため、予算の制約がある場合は検討が必要です。

### プロビジョニングモード
一方で、プロビジョニングモードはデータストリームの作成時に必要なシャード数を明示的に指定するモードです。

このモードでは、予め必要なスループットに基づいてシャード数を設定するため、コストを予測しやすくなります。
スケーリングは手動で行われ、シャードの数を増減することでスループットを調整できます。
プロビジョニングモードは、安定的で予測可能なトラフィックが予想される場合や、特定の処理に対して一貫したスループットが必要な場合に適しています。

# Amazon Kinesis Data Firehose
## Amazon Kinesis Data Firehoseとは
Amazon Kinesis Data Firehoseは、データストリームからのデータをシンプルかつスケーラブルに受け取り、処理・保存するサービスです。

![](https://storage.googleapis.com/zenn-user-upload/be5b5602e35f-20231125.png)

データを指定したAmazon S3、Amazon Redshift、Amazon OpenSearchなどへ直接転送でき、データの変換や加工も柔軟に設定可能です。

Kinesis Data Firehoseは管理が簡単で、サーバーレスのアーキテクチャを提供するため、開発者はデータの取り込みや保存に集中できます。

Kinesis Data Streamとの大きな違いは2つ、1)ストリームではなくバッチで書き込む点、2)データ変換用を実装できる点、です。

## Amazon Kinesis Data Firehoseのスケーラビリティ
Kinesis Data Firehoseは、Kinesis Data Streamsと比較してマネージドであることを売りにしています。

そのため、スケーリングについても考慮する点はなくデータの転送が急増した場合でも、自動的にスケールアウトします。

これにより、急激なトラフィックの変動にも迅速に対応でき、適切なリソースが動的に割り当てられます。
自動スケーリングにより、運用者は手動でのスケールアップやダウンの必要性から解放され、効率的なデータ処理が実現されます。

# Amazon Kinesis Data Analytics
## Amazon Kinesis Data Analyticsとは
Amazon Kinesis Data Analyticsは、リアルタイムデータストリーム上でのSQLクエリを可能にするサービスです。

![](https://storage.googleapis.com/zenn-user-upload/8cceb81b6c9a-20231125.png)

データをストリーム内で変換、集計し、結果を別のストリームやデータストアに送信できます。SQL言語を使用するため、データエンジニアやアナリストは既存のスキルを活かして、リアルタイムデータの分析と洞察を得ることができます。

Kinesis Data Analyticsは、ストリームデータから価値ある情報を取り出すための簡単で効果的な手段を提供し、ビジネスの迅速な意思決定やアクションに貢献します。

Kinesis Data StreamやKinesis Data Firehoseと比較してデータ分析色が強く、直接データを受ける口というよりは、ほか2つのKinesisが受けたものに対してSQLクエリを発行するイメージです。

## Amazon Kinesis Data Analyticsのスケーラビリティ
Kinesis Data Analyticsは、Kinesis Data Firehose同様、処理するデータ量やクエリの複雑さに応じて自動的にスケーリングされます。
クエリの実行に必要なリソースが増減すると、サービスはそれに応じて適切なコンピューティングリソースを自動的にプロビジョニングします。

これにより、リアルタイムデータの急激な変動にも対応し、常に最適なパフォーマンスを提供します。

Kinesis Data Analyticsの裏側ではコンテナベースのアーキテクチャを採用しており、複数のコンテナが同時に実行されます。

各コンテナは独立してクエリを処理し、自己完結型であるため、スケールアウトが柔軟かつ効果的に行われます。
これにより、データの増加やクエリの複雑化に合わせてシームレスなスケールアップが実現されます。

# Amazon Kinesisシリーズの比較
ここまで三種類のKinesisを紹介してきましたが、最後に各Kinesisの使い分けを説明します。

Kinesis Data Streamsは高いスループットが必要で、リアルタイムデータ処理を要する場合、例えば、IoTデバイスのセンサーデータやログデータのリアルタイム分析に適しています。
試験向けかつ実務向けでいうとリアルタイム、が一つのキーワードです。
Kinesis Data Firehoseと比較して管理のための手間はかかる一方、性能を追求する場合にはKinesis Data Streamsを選ぶことになります。

Kinesis Data Firehoseはデータをストリームから転送先に直接保存する簡単なデータパイプラインが必要な場合、特にサーバーレスの運用やデータの冗長性が求められるケースに適しています。
また、データを保存する前に加工できるのも1つの特徴です
試験向けかつ実務向けでいうと運用効率、が1つのキーワードです。
注意点は、Kinesis Data Firehoseはバッチで処理するため準リアルタイムになってしまう点です。
リアルタイム処理が必要であれば運用効率が犠牲になってもKinesis Data Streamsを採用する必要があります。

Kinesis Data AnalyticsはSQLによるリアルタイムデータ分析が必要で、既存のSQLスキルを活用したい場合。データの変換や集計が必要な場面に適していますが、複雑な処理には限定的です。
試験向けかつ実務向けでいうと分析、が1つのキーワードです。
ほか2つと異なり、直接データを受ける口としてではなくKinesis Data StreamsやKinesis Data Firehoseで受けたデータに対してSQLによる分析を行うために利用します。

# まとめ
この記事ではAmazon Kinesisシリーズを耐障害性の観点から超詳細解説しました。

- Amazon Kinesis Data Streamsとは
- Amazon Kinesis Data Streamsのスケーラビリティ
- Amazon Kinesis Data Firehoseとは
- Amazon Kinesis Data Firehoseのスケーラビリティ
- Amazon Kinesis Data Analyticsとは
- Amazon Kinesis Data Analyticsのスケーラビリティ
- Amazon Kinesisシリーズの比較

次回はAmazon Route53の耐障害性を考えます。