まとめ #
- データが長い期間届かないShardはスパイク状のIteratorAgeを通知することがあるけど期待する動作
- 警告をするなど開発者への通知をしたい場合は適切なwindow区間の設定が必要
概要 #
Kinesis Data Streamを使ってIotデバイスからの位置情報の収集システムを作成した。 その際、GetRecords.IteratorAgeMillisecondsでスパイク状の異常値が観測された
どうやら以下と類似の症状らしい。 AWSに問い合わせた結果を記載しておく。
https://repost.aws/questions/QUPebk-r3ORg-llBd1IRokxw/kinesis-data-stream-iterator-age-spikes
repost.aws
AWSの見解 #
シャードがデータを受け取っていない時に、GetRecords.IteratorAgeMilliseconds がスパイク状の大きな値を示すのは期待される動作。 とのこと。 ※前提として、ConsumerとしてKinesis KCLを使っている場合の話っぽい。
もうちょっと長く書くと以下。
最近データを受信していないシャードでIteratorAgeがスパイク状の値を持つのは期待された動作です。
これが起こる原因は以下です。
・コンシューマーはデータを受信するまでチェックポイントを作れません。
・つまり、leaseがシャッフルされたときなどに前回のチェックポイントが随分前になってしまうということです。
・これはShardで保持する期間 TRIM_HORIZON(24時間) よりも前の場合があります。
・これによりコンシューマーは処理の開始が過去であることを認識し、高い IteratorAge を通知しますが、開始シーケンス番号とシャードデータの先頭(TIP)との間にデータがないため、すぐに先頭に追いつきます。
Reply by Email