QUIZ 30分

クイズの説明

Step 3「ストリーム処理とリアルタイム分析を設計しよう」の理解度を確認します。ストリーム処理、イベント駆動アーキテクチャ、CDC、リアルタイム分析について問います。

合格ライン: 80%(5問中4問正解)


問題

Q1. ウィンドウ処理

ユーザーのWebサイトセッションを分析したい場合、最も適切なウィンドウ種類はどれですか?

  • A. タンブリングウィンドウ(5分固定) — 5分ごとの固定区間で集計
  • B. スライディングウィンドウ(5分幅、1分スライド) — 重複する区間で移動平均を計算
  • C. セッションウィンドウ(ギャップ30分) — ユーザーの非活動期間でセッションを区切る
  • D. グローバルウィンドウ — すべてのイベントを1つのウィンドウで処理
答えを見る

正解: C

ユーザーセッションの分析にはセッションウィンドウが最適です。セッションウィンドウは、イベント間のギャップ(非活動期間)に基づいて動的にウィンドウを定義します。30分間操作がなければセッション終了とみなすことで、ユーザーの実際の利用パターンに合った区間でメトリクス(セッション時間、ページビュー数等)を集計できます。タンブリング(A)やスライディング(B)は固定区間のため、1つのセッションが複数のウィンドウに分割されてしまいます。


Q2. 配信保証

売上データのストリーム処理において、データの重複も欠落も許容できない場合、最適な配信保証セマンティクスはどれですか?

  • A. At-most-once — 最大1回配信、データロスの可能性あり
  • B. At-least-once — 最低1回配信、重複の可能性あり
  • C. Exactly-once — 正確に1回配信
  • D. At-least-once + べき等処理 — 最低1回配信し、重複は処理側で排除
答えを見る

正解: D

売上データでは欠落も重複も許容できません。理論的にはExactly-once(C)が理想ですが、分散システムでの完全なExactly-onceは実装が複雑でパフォーマンスコストが高い場合があります。実務では「At-least-once + べき等処理」(D)が最も現実的なアプローチです。At-least-onceでデータロスを防ぎ、消費者側でUPSERT(INSERT ON CONFLICT UPDATE)やトランザクションIDによる重複排除を行うことで、結果的にExactly-onceと同等の効果を低コストで実現できます。


Q3. CDC方式

PostgreSQLからデータウェアハウスへのニアリアルタイムデータ同期に最も適したCDC方式はどれですか?

  • A. タイムスタンプベースCDC — updated_at列で変更を検出
  • B. トリガーベースCDC — DBトリガーで変更を記録
  • C. ログベースCDC(WAL) — トランザクションログを読み取り変更を検出
  • D. 差分比較 — 前回スナップショットとの差分を計算
答えを見る

正解: C

ログベースCDC(WAL: Write-Ahead Log)は、PostgreSQLのトランザクションログを直接読み取るため、ソースDBへの負荷が最小限で、DELETE操作も検出できます。Debezium等のツールがWALの論理デコーディングを使って変更イベントをKafkaにストリーミングします。タイムスタンプベース(A)はDELETEが検出できず、updated_at列がないテーブルには使えません。トリガーベース(B)はソースDBに負荷がかかり、差分比較(D)は大量のSELECTが必要で高負荷です。


Q4. リアルタイム分析

以下の要件に対して最もコスト効率の高いアーキテクチャはどれですか?

日次の売上レポートを毎朝9時に経営層に提供する。レポートの対象は前日までの確定した売上データ。リアルタイム性は不要。

  • A. CDC → Kafka → Flink → ClickHouse → Grafana
  • B. CDC → Kafka → BigQuery Streaming Insert → Looker
  • C. 日次バッチ(Airflow + dbt) → BigQuery → Looker
  • D. CDC → Kafka → Flink → BigQuery → Looker
答えを見る

正解: C

日次レポートでリアルタイム性が不要な場合、最もコスト効率が高いのは日次バッチ処理です。Airflowで朝8時にdbtジョブを実行し、BigQueryでGoldテーブルを更新、Lookerでダッシュボードを提供すれば十分です。A(Flink + ClickHouse)、B(Streaming Insert)、D(Flink + BigQuery)はいずれもストリーム処理のインフラコストと運用コストが発生しますが、「前日までの確定データ」であればバッチで十分です。「リアルタイム化できるからする」のではなく「ビジネス要件に合った最小限のアーキテクチャ」を選択することが重要です。


Q5. イベント駆動アーキテクチャ

Apache Kafkaにおいて、同じTopicのメッセージを複数のコンシューマが独立して消費する場合、正しい設定はどれですか?

  • A. 全コンシューマを同じConsumer Groupに所属させる
  • B. 各コンシューマを異なるConsumer Groupに所属させる
  • C. コンシューマごとに別のTopicを作成する
  • D. Partitionの数をコンシューマ数と同じにする
答えを見る

正解: B

KafkaのConsumer Groupは、同じグループ内のコンシューマでメッセージを分散処理します(各パーティションは1つのコンシューマにのみ割り当て)。一方、異なるConsumer Groupに所属するコンシューマは、同じメッセージを独立して受信できます。例えば、「分析パイプライン」と「アラートサービス」が同じorderイベントを消費する場合、それぞれ別のConsumer Groupにすることで、両方が全メッセージを独立して処理できます。A(同じGroup)だとメッセージが分散され、各コンシューマは一部のメッセージしか受信できません。


結果

合格(4問以上正解)

Step 3の内容をよく理解しています。ストリーム処理、イベント駆動アーキテクチャ、CDC、リアルタイム分析の設計知識を身につけました。次のStep 4「データ品質とガバナンスを確立しよう」に進みましょう。

不合格(3問以下正解)

Step 3の内容を復習しましょう。特に以下のポイントを重点的に確認してください:

  • ウィンドウ処理 — タンブリング、スライディング、セッションの使い分け
  • 配信保証 — Exactly-once vs At-least-once + べき等処理
  • CDC — ログベースCDCの仕組みとメリット
  • コスト意識 — リアルタイム化すべきかどうかの判断基準

推定所要時間: 30分