iT邦幫忙

2025 iThome 鐵人賽

DAY 11
1

還記得上次我們說到:「乾脆把所有邏輯都搬到 Streaming,不就更快?」

從 Lambda 到 Kappa 的轉念

Lambda 架構的雙軌制問題

Lambda 架構裡,我們的數據管道是雙軌制:

Lambda Architecture:

Raw Data ┬ Batch Layer ─ Batch Views ────┐
         │                               ├ Serving Layer─Query Results
         └ Speed Layer ─ Real-time Views ┘

各層職責

  • Batch Layer:批處理,保證最終精確,夜間重算全量資料
  • Speed Layer:即時處理,提供最新結果
  • Serving Layer:融合兩條輸出,對外查詢

代價

  • 相同的邏輯要維護兩份(Batch 與 Stream 各一份)
  • 資源要分兩套系統(Hadoop/Spark + Flink/Kafka)
  • 當需求改動,工程師要同時改兩邊

Kappa 架構的簡化思路

Kappa 架構的思路很直接:「刪掉 Batch Layer,所有處理統一用 Streaming 完成」

Kappa Architecture:

Raw Data ── Event Log (Kafka) ── Stream Processing ── Results

優勢:只要一份邏輯、一套系統,維護量大幅下降。


咖啡店案例的升級版

如果我們把咖啡店所有需求的處理邏輯全部放在 Streaming:

Kappa 架構在咖啡店的應用:

Order Events ── Kafka ── Stream Processing
                              │
                              ▼
                        ┌────────────┐
                        │ • JOIN     │
                        │ • GROUP BY │
                        │ • ORDER BY │
                        │ • TopN     │
                        └────────────┘
                              │
                              ▼
                        Result Tables
                      (Pre-computed Results)
                              │
                              ▼
                          Dashboard

處理流程

  1. Kafka 收到訂單事件
  2. 流處理即時處理
  3. 結果直接寫入結果表(Result Table)
  4. 儀表板查詢時,不需要再 JOIN、GROUP BY 與 ORDER BY 任何東西,延遲 < 50ms

效果:就算高峰期有每秒上百筆查詢,也只是讀一張結果表,不會壓垮資料庫。


但要跨過的關卡:Stateful 運算

思考一下:「那 JOIN、GROUP BY、滑動窗口統計這些要怎麼做?」

沒錯,這是邁向 Kappa 必須解決的核心 - Stateful 運算

為什麼需要狀態?

  • JOIN:需要保存一段時間內的資料,才能與後到的事件配對
  • GROUP BY / Aggregation:要維護中間統計值
  • Window Function:必須記錄窗口範圍內所有事件的狀態
Stateful Operations Challenge:

Event1 ──┐
Event2 ──┼── [State Storage] ── Computed Results
Event3 ──┘        ↑
                  │
            Need to remember:
            • Previous events
            • Intermediate results
            • Window boundaries

關鍵挑戰:沒有狀態管理,就無法將資料庫的多表 JOIN、聚合邏輯完全搬到流處理裡。


給流處理加上「記憶」

在 Day 12 之後,會陸續講解什麼是狀態運算,並在 Simple Streaming 框架中引入簡單實作的 狀態儲存(State Store),讓它不只是無腦處理事件,而是能像資料庫一樣記住過去發生的事。

這一步,將讓我們的 Streaming Pipeline 正式踏入 Kappa 架構的世界。


上一篇
【知其然,更知其所以然】Day 10:Join 太慢?Streaming 幫你提前攤平
下一篇
【知其然,更知其所以然】Day 12: 讓流處理擁有「記憶」- 狀態運算的秘密
系列文
「知其然,更知其所以然:什麼是 Real-time (Streaming) Pipeline?從造輪子到 Flink 與 RisingWave」14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言