Mímisbrunnr知恵の泉

← データエンジニアリング 一覧

🎓 レベル:標準 | 重要度:A(必須)

📎 前提:バッチ処理とストリーム処理データ取り込み(バッチ・CDC) | 関連:ストリーム処理

要点(BLUF)

概念 ── 疎結合な中継としてのpub/sub

直接「アプリAがアプリBを呼ぶ」とすると、Bが落ちればAも詰まり、受け手が増えるたびにAを改修することになります。間にログ(トピック)を挟むと、Aは「発行するだけ」、B/C/Dは「各自のペースで購読するだけ」。送受の都合を切り離せます。

flowchart LR
    P1["producer(注文サービス)"] --> T["トピック(追記ログ)"]
    P2["producer(CDC)"] --> T
    T --> C1["consumer(分析)"]
    T --> C2["consumer(不正検知)"]
    T --> C3["consumer(DWH取り込み)"]

仕組み ── ログ・パーティション・オフセット

Kafkaのトピックはパーティションに分かれ、各パーティション内では順序が保証されます。メッセージには連番(オフセット)が付き、消費者は「どこまで読んだか」をオフセットで覚えます。

flowchart LR
    subgraph TOPIC["トピック(partition 0)"]
      direction LR
      M0["off0"] --> M1["off1"] --> M2["off2"] --> M3["off3 ..."]
    end
    C["consumer:offset=2 まで読了 -> 次はoff3から"]

設計の勘所 ── キュー vs ログ

観点従来のメッセージキューイベントログ(Kafka)
消費後メッセージ削除保持(再生可能)
消費者基本1つが取り出す複数が独立に読める
再処理不可(消えている)offsetを戻せば再生
用途タスク分配イベント基盤・CDC・分析

なぜそうするか ── 「ログ」を真実の源にする

なぜメッセージを消さず、ログとして残すのか。「何が起きたか」の事実列(イベント)こそが一次データだからです。状態(現在の残高)はイベント列(入出金の履歴)から再構成できますが、逆はできません。ログを真実の源にすれば、新しい用途が出ても過去のイベントを再生して作り直せる。CDC(→ データ取り込み(バッチ・CDC))がDBログを流すのも、メダリオンのbronze(→ メダリオンアーキテクチャ)が生を残すのも、同じ「事実を捨てない」思想です。再生可能なログは、データ基盤に“やり直し”の自由を与えます。

⚠️ よくある落とし穴

対応ラボ

なし(基盤概念回・本番Kafkaは外部前提)。ログを使うストリーム集計は ストリーム処理 のラボで扱う。

関連

第7章 ストリーミングとオーケストレーション 目次