Amazon Kinesis Data Streamsについて
アーキテクチャ
Producers > Amazon Kinesis Stream > Consumers > AWSサービス
https://docs.aws.amazon.com/ja_jp/streams/latest/dev/key-concepts.html
用語
Kinesis Data Stream
- データレコードの順序付けられたシーケンス
- ストリーム内の各レコードにはシーケンス番号が割り当てられる
- データレコードはシャードに分配される
データレコード
- Kinesis data streamに保存されるデータの単位
- シーケンス番号、パーティションキー、データBLOB(変更不可のバイトシーケンス)から構成
- データBLOBは最大1MB
保存期間
- データレコードにアクセス可能な期間
- デフォルト(最短):24時間
- 最大:168時間(7日)
- だたし追加料金がかかる
- https://aws.amazon.com/jp/kinesis/pricing/
プロデューサー
- レコードをAmazon Kinesis Data Streamに入れる存在
- 例:ストリームにログを送信するWEBサーバ
コンシューマ
- レコードをAmazon Kinesis Data Streamから取り出して処理する存在
- Amazon Kinesis Data Streams Applicationsと呼ばれる
Amazon Kinesis Data Streams Applications
- ストリームのコンシューマで一般的には複数のEC2で実行される
- Kinesis Client LibraryかKinesis Data Streams API を使用して開発可能
- さまざまなAWSサービスに出力可能
- S3
- DynamoDB
- Redshift
- EMR
- Amazon Kinesis Firehose
- ストリームは1つでOK
- 複数のAmazon Kinesis Data Streams Applicationが同時かつ独立してストリームからデータをつかえる
Amazon Kinesis Data Streams application 名
- アプリケーションを識別
- AWSアカウントとリージョンで一意の名前が必要
- DynamoDBでは制御テーブル名として使われる
- CloudWatchでは名前空間メトリックとして使われる
Shard(シャード)
- ストリームは複数のシャードで構成される
- データレコードのグループ
- 各シャードが容量の1単位
- 各シャードの読み取りについて
- 最大 5トランザクション/秒
- 最大 2MB/秒
- 各シャードの書き込みについて
- 最大 1000レコード/秒
- 最大 1MB/秒
- 各シャードの読み取りについて
- シャードの増減は可能
パーティションキー
- データをシャード単位でグループ化するために使用される
- データレコードを複数のシャードに配分するときパーディションキーを使用する
- パーディションキーは最大256バイト超のUnicode
- MD5ハッシュ関数を使用してパーディションキーを128バイトの整数値にマッピング
- 関連づけられたデータレコードをシャードにマッピングする
- ストリームにデータを入力するアプリによって指定される
シーケンス番号
- 各データレコードはシャード内で一意のシーケンス番号を持つ
- シーケンス番号はデータのインデックスとしては使用できない
- 一連のデータを区別するにはパーティションキーを使用するかデータセットごとに個別のストリームを作る。
サーバサイド暗号化
- プロデューサーがストリームに入力するとき、自動的に暗号化可能
- KMSを使用する
- https://docs.aws.amazon.com/ja_jp/streams/latest/dev/server-side-encryption.html
- プロデューサー、コンシューマーアプリが暗号化されたストリームへの読み書きを行うとき
- マスターキーへのアクセス許可が必要