Kinesis Data Streams
暗号化
KMSで保存中のデータを暗号化
HTTPSエンドポイントで転送中の暗号化
KCL
Kinesis Client Library
EC2にKCLを組み込んで〜〜を実装、みたいな文脈で登場
Lambdaで処理する
アクティブなシャード単位に1Lambda関数が実行される状態が維持される
Lambdaの最大同時実行数はシャードの数と同値になる
シャードイテレーター
シャード単位の読み込みカーソルのようなもの?
シャードが多数ある場合にイテレータが使用不能になってしまうことがある
そういう場合、テーブルに割り当てる書き込み容量を増やすとよい
シャード数とEC2インスタンス数の関係
最大インスタンス数 = シャード数
インスタンス数 > シャード数 は成り立たない。逆は可能
データーフローのシャード数
スケーリング手段
マージ/分割
オートスケールを実施するような機能はネイティブには存在しない。
保持期限
デフォルトでは24時間。
設定で変更できる。最大で168時間。
重複排除
主キーをデータに埋め込むことで、 consumer 側で重複排除が可能になる
「メッセージ重複排除ID」というおあつらえむきの機能もあるが、これは送信側でリトライが必要な場合には適さない
同じIDを持つメッセージが5分以内の間は遅れない、という仕様なので
ProvisionedThroughputExceededExceptionエラーの対処
書き込み時
シャード単位の制限を超えて書き込みをした時に起こる
より具体的には、1000レコード/秒 or 1MB/秒 を超えたときに起こる
対処としては、下記が想定される
パーティションキー設定の見直し
読み込み処理をがんばる(後述)
読み込み時
処理する方の勢いが足りてなくて、溜まりすぎてる時に起こる
より具体的には、シャード単位に実施する GetRecords API のレスポンスが10MBを超えると起こる
対処としては下記が効果的
consumer側の Lambda などの並列数を増やす
producer側でエクスポネンシャルバックオフを実施する
同様の考えが #DynamoDB においても適用できる(エラーの名前も一致する)