Lambda関数がKinesis Data Streams(4シャード)からレコードを受信して注文処理を行っています。CloudWatchのGetRecords.IteratorAgeMillisecondsメトリクスが2時間にわたって増加し続け、現在30分以上のラグが発生しています。Lambda関数のエラー率は0%であり、タイムアウトも発生していません。この処理ラグを解消するための最も効果的な方法はどれですか?
IteratorAgeMillisecondsの増加は、Lambda(コンシューマー)の処理速度がプロデューサーの書き込み速度に追いついていないことを示す。エラー率もタイムアウトもない場合、処理の並列度不足が主因。ParallelizationFactorはデフォルト1を最大10まで設定でき、1つのシャードに対して最大10のLambda呼び出しを並行実行できるようになる。シャード数やLambdaコードを変更せずにイベントソースマッピング設定の変更のみで処理スループットを最大10倍に向上できる。 選択肢AのUpdateShardCountでのシャード増加は書き込みキャパシティを増やすが、既存のシャードに残るレコードのIteratorAgeは解消されない。再シャーディング後も元のシャードが閉じるまで処理が続き、コンシューマー側の処理速度改善にはならない。 選択肢BのBisectBatchOnFunctionErrorはバッチ処理中にエラーが発生した際にバッチを二分割して再試行する機能。エラー率が0%の本シナリオでは機能せず、スループット改善とは無関係。 選択肢Dのバッチサイズ増加は1回の呼び出しで処理するレコード数が増えるが、Lambda関数の実行時間が延びてタイムアウトリスクが高まる可能性があり、ParallelizationFactorほどの直接的なスループット改善効果は期待できない。