aws-cliからkinesisを使ってみた。

aws-cliからkinesisを使ってみた。

参考URL
https://docs.aws.amazon.com/ja_jp/streams/latest/dev/fundamental-stream.html

AWSのディベロッパー試験問題(udemy)をやっていると、やたらとkinesis data streams(大量のセンサやIoTからデータを取得・保持・応答するAWSサービス)の問題が出てくるので触ってみた。
kinesis専門用語
プロデューサ = データ生成するもの。センサ・IoT機器・PC・スマホ
シャード = プロデューサからデータを受け取り、コンシューマに引き渡す。デフォ24時間保持。最大7日保持
※shard = 破片、ココではサーバの意味
コンシューマ = EC2,S3,DynamoDBがシャードにリクエストして、データをもらって何かする

windows10にaws cliをインストールして、DOS窓からaws操作してみた

1, 最初にkinesisインスタンスを生成。シャードは1個

2, プロデューサ役となって、データ送信。パーティーションキーは1固定(シャードが1個だから)。データはbase64エンコードする必要がある。
base64エンコードしていない文字列だと、Invalid base64: “test123″みたいに言われる。
成功すれば、シャードIDを返してくれる(データ取得時に使う)
SequenceNumberがデータIDみたいなもん?

3, コンシューマ役になって、データをもらうにはイテレータ取得→データ取得の2段階

4, 使わないkinesisを削除する
aws kinesis delete-stream –stream-name myKinesis

# 削除されたか確認
aws kinesis describe-stream –stream-name myKinesis
# NotFoundになれば削除された。
An error occurred (ResourceNotFoundException) when calling the DescribeStream operation: Stream myKinesis under account xxxxxxxxxxx not found.

// パーティションキーと複数シャードの割当について
パーティションキーをハッシュ化(128bit)して、保持しているシャードに割り当ててるらしい。
128bitだと分かりづらいので2bitハッシュで考えてみると

パーティションキー=0ならmod4してシャード0に割り当て
パーティションキー=1ならmod4してシャード1に割り当て
パーティションキー=2ならmod4してシャード2に割り当て
パーティションキー=3ならmod4してシャード3に割り当て
パーティションキー=4ならmod4してシャード0に割り当て
パーティションキー=5ならmod4してシャード1に割り当て
パーティションキー=6ならmod4してシャード2に割り当て
パーティションキー=7ならmod4してシャード3に割り当て
パーティションキー=8ならmod4してシャード0に割り当て
パーティションキー=9ならmod4してシャード1に割り当て

みたいなイメージだと思う。

// 適切なシャード数は?
1シャード当たりの性能が、Write=1MB/sec、Read=2MB/secなので、センサから毎秒3MBとかデータ送信されているなら、最低3シャード必要。少し余裕をもつ必要がある。
シャード数の変更(リシャード)は出来るが、一度の操作では、2倍(分割)か1/2(結合)にしか出来ない。

まあ、なんとなくイメージは掴めてきた。実務ではあんまり使う機会がなさそう・・・。