無限ノック › DVA 練習問題一覧 › 問題
DVAトラブルシューティングと最適化

Lambda関数がKinesis Data Streams(4シャード)からレコードを受信して注文処理を行っています。CloudWatchのGetRecords.IteratorAgeMillisecondsメトリクスが2時間にわたって増加し続け、現在30分以上のラグが発生しています。Lambda関数のエラー率は0%であり、タイムアウトも発生していません。この処理ラグを解消するための最も効果的な方法はどれですか?

A
Kinesis Data StreamsのシャードをUpdateShardCountで4から8に増やし、各シャードへの書き込み・読み取り負荷を分散させてIteratorAgeMillisecondsを削減する
シャードを増やすことで書き込みキャパシティは向上するが、問題はコンシューマー側の処理速度不足。再シャーディング後も元のシャードの未処理レコードは残り既存のIteratorAgeは解消されない。書き込み側の改善では読み取り処理ラグは直接解消できない。
B
Lambda関数のイベントソースマッピングでBisectBatchOnFunctionErrorを有効化し、バッチ失敗時に自動でバッチを二分割して再試行することでスループットを向上させる
BisectBatchOnFunctionErrorはバッチ処理でエラーが発生したときに失敗バッチを半分に分割して再試行する機能。エラー率が0%のこのシナリオでは全く動作せず、処理ラグの解消にも直接関係しない。
C
Lambda関数のイベントソースマッピングでParallelizationFactor(並列化係数)を1から最大10に設定し、シャードごとに複数のLambda呼び出しを並行実行して処理スループットを向上させる
✓ 正解
ParallelizationFactorを増やすと1シャードあたりの同時Lambda実行数が増加し(最大10)、シャード数を変更せずに処理スループットを最大10倍に向上できる。イベントソースマッピングの設定変更のみでIteratorAgeMilliseconds増加の根本的な解決が可能。
D
Lambda関数のバッチサイズを100から10,000レコードに増やし、1回のLambda呼び出しでより多くのレコードをまとめて処理できるよう変更して効率を上げる
バッチサイズを増やすことで1回の呼び出しあたりのレコード処理数は増えるが、Lambda実行時間の延長によりタイムアウトリスクが高まる可能性がある。並列度は変わらないためParallelizationFactorほどの直接的なスループット改善効果は期待できない。

解説

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

ドメイン別正答率・予想スコアでリアルタイムに実力把握

無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。

無料で演習を始める →
← DVA の問題一覧に戻る