Posted at

【AWS】Kinesisまとめ

More than 3 years have passed since last update.


Kinesisとは?

一言で言うと、沢山の場所から送られてくる大量のデータを受け付ける窓口。

有名なのが「あきんどスシロー」の事例。

そう、IT化されまくっていて、うまいすしを、腹一杯。うまいすしで、心も一杯になるあの寿司屋です。

あきんどスシローでは寿司の皿をタグで管理していて、全店舗の寿司情報をKinesisにぶち込んでいます。

簡単に聞こえますが、これは、そうとう膨大なデータ量になります。

この膨大なデータの受付窓口を作ろうと思うと、大規模なインフラ環境が必要になります。数十台とか。機器コスト、さらに運用コストが半端ない。

でも、このKinesisを使うと、とても簡単にとてもリーズナブルな値段で利用できるという話です。

何十万ものソースから、1時間あたり何テラバイトにもなる膨大なデータを貯められます。

データは複数AZに格納されるので信頼性・耐久性が高いです。

ただし、一時的なデータ置き場として24時間後にはKinesis上からデータが消えます。

なので、データを受けた後は、整形等のETL処理に加え、S3・Redsift・dynamoDBにデータを永続化する必要があります。


Kinesisの構成


  • Stream:データ受付窓口

  • Shard:受付することができるキャパシティ。shardを増やすと、受け付けることができる量を増やせる。

  • Data Record:入力するデータ。複数AZに格納され、24時間後には消える

  • 複数Shardがある状態でデータ入力する場合は、パーティションキーを元にしたMD5を元に分散される(うまく分散するようにパーティションキーを指定する必要あり)

  • シーケンス番号:Data Recordに付加されるStream内でユニークな番号

  • KinesisデータはKinesisコネクタを利用して、S3、DynamoDB、RedShiftに永続化できる

  • EMRコネクタを利用して、Hive、Pigといった連携ができる


コスト

かなり安い。

10Shardで、1億putで、約月額$110→1万円ちょい

検証で1Shardで5時間使った場合、20円しない→気軽に検証できる!!


  • Shard単位で料金がかかるため、負荷が低い時間帯はshardをマージすると料金を安くすることができる。負荷が高くなる時間帯は逆にShardを分割する