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

4シャードのKinesis Data StreamsをイベントソースとするLambda関数で注文イベントを処理している。トラフィック増加に伴いGetRecords.IteratorAgeMillisecondsが継続的に増加し、処理遅延が深刻化している。各注文はorderIdをパーティションキーとしており、同一orderId内のイベント処理順序は維持する必要がある。シャード数を変えずに、最小限の変更でコンシューマーのスループットを向上させる方法はどれか。

A
イベントソースマッピングの並列化係数(ParallelizationFactor)を引き上げ、シャードあたりの同時バッチ処理数を増やす
✓ 正解
ParallelizationFactor(最大10)を上げると、Lambdaは1シャード内のレコードをパーティションキー単位で複数バッチに分けて同時処理する。同一orderId内の順序は維持されるため、順序要件を守りつつシャードを増やさずスループットを向上でき、IteratorAgeを下げられる。
B
イベントソースマッピングのバッチサイズを小さくし、Lambda呼び出しの頻度を上げる
バッチサイズを下げると1回あたりの処理レコードは減るが、シャードあたりの同時処理数は1のままで総スループットは向上しない。むしろ呼び出し回数とオーバーヘッドが増え、IteratorAgeの改善は期待できない。
C
ストリームを拡張ファンアウト(Enhanced Fan-Out)に切り替え、コンシューマー専用スループットを確保する
拡張ファンアウトは各コンシューマーに2MB/秒の専用スループットと低レイテンシ配信を提供するが、これはストリーム読み取り帯域への対策。ボトルネックはLambda側の処理並列度であり、この変更では処理スループットは上がらない。
D
シャード数を8に増やすリシャーディングを実施し、各シャードの負荷を分散する
リシャーディングでシャードを増やせばスループットは上がるが、シャード数を変えないという制約に反する。再分割でパーティションキーの割り当ても変わり、コストと運用変更も大きく最小限の変更にあたらない。

解説

イベントソースマッピングのParallelizationFactorは、1つのシャードに対してLambdaが同時に処理するバッチ数(最大10)を指定する。 通常シャードごとに同時実行は1だが、これを引き上げると同一シャード内のレコードをパーティションキー単位のグループに分けて並列処理する。同一パーティションキー(orderId)内の順序は保証されるため、順序要件を満たしつつシャード数を変えずにスループットを向上できる。 選択肢Bのバッチサイズ縮小は、並列度が1のままで総スループットは上がらない。 選択肢Cの拡張ファンアウトは、読み取り帯域・配信レイテンシの改善策であり、コンシューマー処理の並列度ボトルネックは解消しない。 選択肢Dのリシャーディングは効果はあるが、シャード数を変えないという制約と最小変更の要件に反する。

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

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

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