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

Kinesis Data Streams(4シャード)をイベントソースとするLambda関数が、リアルタイムのクリックストリームを処理しています。トラフィック増加に伴い、CloudWatchのIteratorAgeMilliseconds(GetRecords.IteratorAgeMilliseconds)が継続的に上昇し、処理遅延が拡大しています。各レコードの処理は独立しており順序保証は不要です。シャード数を増やさずに、最小限の構成変更でスループットを高め遅延を解消する方法はどれですか。

A
イベントソースマッピングのParallelizationFactorを引き上げ、1シャードあたり複数の同時バッチを処理させる
✓ 正解
ParallelizationFactorを上げると1シャードを最大10並列で同時処理でき、順序保証が不要な本ケースではシャードを増やさずに消費スループットを高めIteratorAgeを下げられる。最小限の構成変更で要件を満たす。
B
イベントソースマッピングのBatchSizeを最大の10000に増やし、1回の呼び出しで処理するレコード数を増やす
BatchSizeを増やしても各シャードの処理は逐次のままで並列度は変わらない。処理速度が追いつかなければIteratorAgeは下がらず、根本的なスループット不足は解消されない。
C
Lambda関数の予約済み同時実行数(Reserved concurrency)を引き上げ、より多くのインスタンスを確保する
Kinesisの並列度はシャード数×ParallelizationFactorで決まるため、予約済み同時実行を増やしても実際に消費される並列度は上がらず、IteratorAgeの改善にはつながらない。
D
Kinesisストリームを拡張ファンアウト(Enhanced fan-out)に変更し、コンシューマーの読み取り帯域を専有させる
拡張ファンアウトは複数コンシューマーが読み取り帯域を専有するための機能で、コンシューマー間の競合解消が目的。単一コンシューマーの処理遅延(IteratorAge)を直接改善するものではない。

解説

Kinesisのイベントソースマッピングはデフォルトでシャードあたり1つのLambdaインスタンスが処理しますが、ParallelizationFactor(1〜10)を引き上げると、1シャードを最大10並列で同時処理できます。 順序保証が不要なケースでは、シャード数を増やさずに並列度を高めてIteratorAgeを下げる最小限の変更として最適です。 選択肢BのBatchSize増加は1回あたりの取得件数を増やしますが、シャードあたりの処理は依然として逐次のままで、処理が追いつかなければIteratorAgeは下がりません(Kinesisの最大BatchSizeは10000ですが並列度は上がりません)。 選択肢Cの予約済み同時実行はKinesisでは並列度の上限がシャード数×ParallelizationFactorで決まるため、同時実行数だけ上げても消費は増えません。 選択肢Dの拡張ファンアウトはコンシューマー間の読み取り帯域競合を解消する機能で、単一コンシューマーの処理速度(IteratorAge)の改善が目的ではありません。

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

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

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