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を分割する