iT邦幫忙

2025 iThome 鐵人賽

DAY 20
1
AI & Data

「知其然,更知其所以然:什麼是 Real-time (Streaming) Pipeline?從造輪子到 Flink 與 RisingWave」系列 第 20

【知其然,更知其所以然】Day20:Flink 的崛起 - True Streaming Processing

  • 分享至 

  • xImage
  •  

真正的流式處理是什麼?

經過 19 天的探索,我們從零開始構建了 SimpleStream,深入理解了流式處理的核心概念。現在該是時候向業界標準學習,看看什麼是真正的生產級流式處理。

當我們談論「流式處理」時,你可能會想:「不就是持續處理數據嘛,有什麼複雜的?」但現實遠比這複雜。

傳統批處理:
數據 → [等待累積] → [批量處理] → 結果
延遲:分鐘到小時級別

微批處理 (Spark Streaming):  
數據 → [小批次累積] → [快速批量處理] → 結果
延遲:秒級別

真正流處理 (Flink):
數據 → [逐條處理] → 結果
延遲:毫秒級別

這就是 Apache Flink 的核心理念:Record-by-record processing - 每一條數據到達時立即處理,而不是等待批次。

True Streaming vs Micro-batch:本質的差異

Micro-batch 的本質

想像一個餐廳的廚房:

Micro-batch 模式(批量做菜)

  • 收集10個訂單 → 一起備料 → 一起下鍋 → 同時出餐
  • 優點:效率高,資源利用好
  • 缺點:第一個客人要等其他9個訂單湊齊

True Streaming 模式(即點即做):

  • 一個訂單來 → 立即備料 → 立即下鍋 → 立即出餐
  • 優點:響應快,延遲低
  • 缺點:資源利用需要精心設計

實際業務影響

場景:實時風控系統

Micro-batch (5秒間隔):
09:00:00 - 用戶下單(可能是欺詐)
09:00:05 - 系統開始處理這批訂單
09:00:06 - 發現欺詐,但為時已晚
結果:5秒的檢測延遲可能導致損失

True Streaming:
09:00:00 - 用戶下單
09:00:00.050 - 立即檢測出欺詐並攔截
結果:及時防止損失

為什麼延遲這麼重要?

  • 金融交易:毫秒級的套利機會
  • 廣告競價:實時出價決定廣告展示
  • 工業控制:設備異常需要立即響應
  • 遊戲系統:玩家體驗需要實時反饋

Flink 的技術突破

工業級的狀態管理

Flink 的狀態管理是其核心特性之一,解決了大規模流處理中的關鍵挑戰:

分散式狀態存儲:

  • 狀態按 key 自動分片到不同節點
  • 熱點數據自動負載均衡
  • 支援 TB 級狀態存儲

自動備份與恢復:

  • 增量檢查點,只備份變更部分
  • 故障恢復
  • 狀態一致性保證,不會出現數據不一致

多種狀態後端:

  • MemoryStateBackend:開發測試用
  • FsStateBackend:小到中等規模生產
  • RocksDBStateBackend:大規模生產

Exactly-Once 的一致性保證

這可能是 Flink 最具挑戰性的技術突破:

At-least-once:每條數據至少被處理一次

  • 可能重複處理,但不會丟失
  • 實現簡單,性能較好

At-most-once:每條數據最多被處理一次

  • 可能丟失數據,但不會重複
  • 對於某些場景可接受

Exactly-once:每條數據恰好被處理一次

  • 既不丟失也不重複
  • 實現複雜,但是理想狀態

總結

Flink 之所以能夠脫穎而出,成為流處理領域的標杆,是因為它在正確的時間做出了正確的技術選擇:
選擇真流處理而非微批處理:追求最低的處理延遲
選擇分散式狀態而非外部存儲:實現真正的擴展性
選擇精確一次而非至少一次:滿足最嚴格的一致性要求

這些選擇背後,是對流處理本質的深刻理解。正如我們在構建 SimpleStream 時學到的那些原理,在 Flink 中都得到了工業級的實現。

Day 21 預告:Flink 核心概念全解析

理解了 Flink 的設計理念後,下一章我們要深入 Flink 的內部世界,掌握那些在生產環境中天天打交道的核心概念:

架構層面

  • JobManager vs TaskManager:誰是大腦,誰是手腳?
  • Source & Sink:數據的入口和出口如何設計?

處理機制

  • Backpressure:當下游處理不過來時,Flink 如何優雅處理?
  • Checkpointing:如何在不停止服務的情況下保存狀態?

業務功能

  • Stateful Processing:如何在流中維護複雜的業務狀態?
  • Join 操作:Lookup Join 和 Streaming Join 的應用場景?

這些概念是 Flink 工程師的必備技能,也是從理論走向實踐的關鍵一步。


上一篇
【知其然,更知其所以然】Day19:現實的考量 - 擁抱開源生態
下一篇
【知其然,更知其所以然】Day 21: Flink 核心概念全解析
系列文
「知其然,更知其所以然:什麼是 Real-time (Streaming) Pipeline?從造輪子到 Flink 與 RisingWave」26
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言