(-> % read write unlearn)

My writings on this area are my own delusion

kinesis入門

JAWS-UG CLI専門支部 #22 - Kinesis入門』参加メモ

スライドと資料がとても丁寧で、進行は比較的速いハンズオン形式でしたが詰まることなく進められました。本当に感謝です。ありがとうございます。 以下はメモです。

一言で言うと

kinesisとは、大規模なストリーミングデータをリアルタイムで収集可能なAWSのフルマネージドサービス。

キーワード
  1. キュー
  2. リアルタイム
  3. スケーラビリティ
  4. 複数のconsumerが利用可能。→経路分け。
  5. 高い信頼性・可用性
構成
  • Stream: kinesisのサービス利用の単位。
    Stream 1:n Shard
  • Shard: スループットの単位。1Shardあたりのスループットは決められている。
    Shard 1:n Data Record
  • Data Record: データ、パーティションキー、シーケンスナンバ
  • データ: 任意。ユーザがputする目的物。
  • パーティションキー: どのShardに振り分けるかを決定するキー
  • シーケンスナンバ: Stream内で Data Record をユニークに識別する番号。putするとkinesisが発番してくれる。
Shard
  • Shardのスループット
    • 入力:1.0MB/秒、1,000件/秒
    • 出力:2.0MB/秒、5件/秒

ハンズオン中は見逃していたけど、件数では入力のほうが値が大きくデータサイズでは出力のほうが大きいので、イベントの発生に同期して都度putされたデータをある程度まとめてガツッとgetするような使い方を想定するから、こんな感じのバランスなのだろうか。

  • shardを分割すると新しいshard id が2つ作成される。

    • 古いshardはクローズされるが、そのまま(表示上は)残る。(ステータスも"closed"になってました。)
  • Shard数の分割はマネジメントコンソールからはできない。CLIのみ。

  • shard-iterator は取得から5分間のみ有効。

パーティションキー
  • パーティションキーに対するMD5値を計算し、それに応じたshardにデータが送られる(分散される)。

  • パーティションキーのハッシュ値はランダムで付与するほうがベター。常に、Shardの負荷が均等に分散した状態が良い状態。

シーケンスナンバ
  • シーケンスはストリームの中でユニーク(Shardをまたいでユニーク)な値。

  • シーケンスの順番、だいたい時系列。ちゃんと保証するにはオプションを付けるそう。

その他
  • データを蓄積できるのは24時間まで。変更不可。

  • KCL(Kinesis Client Library)はEC2上で動作させる必要がある。

    • JavaPython、Node、Ruby とかがある。
    • Lambdaが使えるんだったらLambdaを使ったほうがいい。 -> EC2の管理が要らなくなる。
  • SQSとの違い。

    • SQSには順序立ててデータ取得するというのはできない。
    • スケールさせやすい。
    • (もっとあったけど聞き逃しました。)
  • 操作(コマンド)はputかgetしかない。deleteはできない!stareamごと消すのはできる。

感想
  • クラウド的キュー。高性能なSQS。というイメージ。
  • TRIM_HORIZON だけ名前が分かりづらい。
  • Shardの分割の際にハッシュレンジの真ん中を手動で指定するのとか、辛いな、と思った。だいたい真ん中で分割したいケースだけなのでは。そこらへんはたぶんKCLを使えば隠蔽してくれるんじゃないかと予想してる。
  • kinesisの完成度もすごいけど、今回の資料の完成度のほうがすごかったです。ありがとうございました!