AWS認定資格 WEB問題集&徹底解説

データエンジニア-アソシエイト

正解 B問題
分野1:データの取り込みと変換 タスクステートメント1.4:プログラミング概念の適用
合格に向けて、もっと深く学習する
豊富な問題と詳細なAWSサービス解説を、24時間無料でお試しいただけます
プレミアム会員機能を無料で試す ❯
問題文と選択肢
ある配車サービスは、車両の位置情報を6個のシャードを持つ Amazon Kinesis データストリームに送信しており、Kinesis Client Library (KCL) を使用する1台の Amazon EC2 インスタンスでストリームを処理しています。アプリケーションのスケーリングのため、同じ KCL ワーカー構成を持つ Amazon EC2 インスタンスをもう2台追加し、合計3台の構成にしました。

この変更によって生じる結果として、MOST 適切なものはどれですか。
  • 新しいインスタンス上で KCL ワーカーが起動しても自動的な再分配は行われないため、既存の1台が6個のシャードを処理し続け、残り2台は処理を行わない
  • 3台のインスタンス上で KCL ワーカーが起動し、既存インスタンスと負荷分散した結果、各インスタンスが2個ずつシャードを処理するようになる
  • インスタンス数がシャード数を上回るまでは再分配が発生しないため、シャードの処理が一時的に停止する
  • 3台のインスタンスがそれぞれ6個のシャードすべてを重複して処理するようになる
解説 頻出度★★★★★
この問題は、「6 シャード × 同一 KCL アプリケーションのワーカー 3 台」という構成で、KCL がリース(lease)を使ってシャードをワーカー間に自動で均等配分するという動作を理解しているかがポイントです。

A. 新しいインスタンス上で KCL ワーカーが起動しても自動的な再分配は行われないため、既存の1台が6個のシャードを処理し続け、残り2台は処理を行わない

KCL は各シャードの所有権をリースとして DynamoDB のリーステーブルに記録し、ワーカーは定期的にテーブルを確認して「自分が持つべきリース数」を計算します。
他のワーカーが平均より多くのリースを持っていればリースを引き取る(lease stealing)ため、新しいワーカーを起動するだけで再分配は自動的に行われます。
手動の割り当て作業は不要で、「再分配されない」という記述は KCL の基本動作に反します。

正解

B. 3台のインスタンス上で KCL ワーカーが起動し、既存インスタンスと負荷分散した結果、各インスタンスが2個ずつシャードを処理するようになる

同じアプリケーション名(=同じリーステーブル)を共有する KCL ワーカーが 3 台になると、6 個のシャードのリースが 3 台に均等に配分され、各インスタンスが 2 個ずつのシャードを処理する状態に落ち着きます。
再分配はリースの更新周期に沿って段階的に進み、その間も処理は継続されます。これが KCL によるスケールアウトの標準的な挙動です。
なおスケールアウトの上限はシャード数であり、ワーカーを 7 台以上にしても余剰のワーカーはリースを取得できずアイドルになります。

C. インスタンス数がシャード数を上回るまでは再分配が発生しないため、シャードの処理が一時的に停止する

逆です。ワーカー数がシャード数を上回った場合に起きるのは余剰ワーカーがリースを取得できずアイドルになることだけで、処理が止まることはありません。
本問はワーカー 3 台に対してシャード 6 個なので、そもそもワーカー数がシャード数を上回ってもいません。
リースの移譲中もチェックポイントを引き継いで処理は継続されるため、「処理が一時的に停止する」という結果は生じません。

D. 3台のインスタンスがそれぞれ6個のシャードすべてを重複して処理するようになる

1 つのシャードのリースを保持できるワーカーは同時に 1 つだけで、KCL はこの排他制御によって同じレコードが複数のワーカーで重複処理されるのを防いでいます。
同じデータを複数のアプリケーションで独立に読みたい場合は、異なるアプリケーション名の KCL アプリケーション(=別のリーステーブル)や拡張ファンアウトのコンシューマーを使います。
本問は「同じ KCL ワーカー構成」を追加しているため、重複処理ではなく分散処理になります。

これだけ覚える(記憶フック)
KCL はシャードのリースを自動で奪い合って均等化。6 シャード ÷ 3 ワーカー = 各 2 個。
正解への思考ルート 問題文から要件を抽出し、選択肢の適否を判断するのがポイントです。
要件 判断ポイント
Kinesis データストリームのシャード数は 6 個 KCL の並列度の上限はシャード数。ワーカー数がシャード数以下なら全ワーカーが仕事を持てる
→選択肢(C)を消す
同じ KCL ワーカー構成のインスタンスを 3 台に増やした 同一アプリケーション名なら同じ DynamoDB リーステーブルを共有し、リースが自動で再分配される
→選択肢(A)を消す
1 つのシャードを処理できるワーカーは同時に 1 つ リースによる排他制御があるため、複数ワーカーが同じシャードを重複して読むことはない
→選択肢(D)を消す
6 個のシャードを 3 台のワーカーで分担する リース数が均等になるよう調整され、6 ÷ 3 = 各 2 個に落ち着く
→選択肢(B)が正解
ひっかけポイント
  • 「新しく起動しただけでは分配されない」は一見慎重に見えるが、リースの自動取得・移譲こそが KCL の中核機能。手動割り当ては不要
  • 重複処理(選択肢 D)が起きるのはアプリケーション名を変えた別の KCL アプリケーションにした場合。「同じ KCL ワーカー構成=同じアプリケーション名」という前提を読み落とすとひっかかる
  • ワーカーを増やせばいくらでもスケールするわけではない。シャード数を超えたワーカーはアイドルになるため、スループットを上げたいならリシャーディングでシャードを増やす
  • リースの再分配は瞬時ではなくリース更新の周期に沿って段階的に進むが、その間も処理は継続する。「一時的に停止」という表現は誤り
出題バリエーション 同じ知識が本番では条件を変えて出題されます。
問題文がこう変わったら 正解はこう変わる
「インスタンスを8 台に増やしたら」 6 台が 1 シャードずつ処理し、2 台はアイドル(スケールアウトの上限はシャード数)。
「処理スループットが足りず GetRecords.IteratorAgeMilliseconds が増加している」 シャード分割(リシャーディング)やオンデマンドモードでシャード数を増やすのが正解軸に。
「同じストリームを別チームが独立に処理したい」 別のアプリケーション名の KCL アプリケーション、または拡張ファンアウトのコンシューマー登録が正解軸に。
「KCL ではなく AWS Lambda でストリームを処理する」 イベントソースマッピングの並列化係数(ParallelizationFactor)やバッチサイズの調整が論点に。
「ワーカーが障害で停止した」 リースの有効期限が切れると他のワーカーがリースを引き継ぎ、チェックポイントの続きから処理を再開する。
関連サービスの解説 Amazon DynamoDB
Amazon EC2
Amazon Kinesis
+ 質問 / コメント
解答・解説に疑問がある場合や、よりよい解説がある場合など、お気軽にコメントください。ただし、短文コメントは表示されません。また、中傷などコメントの内容によっては、会員機能を停止させて頂きます。教え学び合える場になれば嬉しいです。(コメント投稿にはログインが必要です)
正答率 0%
No.13 解説
ある配車サービスは、車両の位置情報を6個のシャードを持つ Amazon Kinesis データストリームに送信しており、Kinesis Client Library (KCL) を使用する1台の Amazon EC2 インスタンスでストリームを処理しています。アプリケーションのスケーリングのため、同じ KCL ワーカー構成を持つ Amazon EC2 インスタンスをもう2台追加し、合計3台の構成にしました。

この変更によって生じる結果として、MOST 適切なものはどれですか。
  • 新しいインスタンス上で KCL ワーカーが起動しても自動的な再分配は行われないため、既存の1台が6個のシャードを処理し続け、残り2台は処理を行わない
  • 3台のインスタンス上で KCL ワーカーが起動し、既存インスタンスと負荷分散した結果、各インスタンスが2個ずつシャードを処理するようになる
  • インスタンス数がシャード数を上回るまでは再分配が発生しないため、シャードの処理が一時的に停止する
  • 3台のインスタンスがそれぞれ6個のシャードすべてを重複して処理するようになる

(会員限定)当問題の評価をお願いします。改善に活用します。