目錄
Apache Flink 介紹
Apache Flink 是一個 open source 的 streaming data processing framework,專為分布式、高效能、容錯和實時數據流應用而設計。它由 Apache Software Foundation 管理,支援完全的 streaming processing,也支持 batch processing 和 streaming processing 的混合模式。
Flink 的核心特性:
- 真正的 streaming processing:Flink 是被設計用於連續的 data flow 處理,支持的 event trigger 和 realtime 的資料分析。
- 容錯機制:checkpoint 機制和 recovery 的策略能確保 data 的一致性,即使在發生故障的情況下,也能確保沒有 data 不見。
- High throughput 與 low latency:Flink 能夠處理非常高的 input rate,同時維持 low latency,適合要求嚴格的 realtime 處理任務。
- 靈活的 API:提供了 Java 和 Scala 的 API,開發者可以輕鬆實現複雜的數據處理應用(例如實時檢測信用卡的盜刷)。也支持 Python API。
其他類似框架包括 Apache Spark(但他其實不是真正的 streaming framweork 他只是 batch 的很快)、Apache Storm、Apache Samza、Amazon Kinesis Streams、Apache Apex、Apache Flume 等等。
Apache Flink 架構
1. Flink Program
- Program Code:這是 user 編寫的 Flink 程式,通常包括 data flow 處理的邏輯。
- Optimizer / Graph Builder:Flink 程序被轉為 data flow ,Optimizer 會根據運行環境進行優化以提升執行效率。
2. Client 端
- Dataflow Graph:經過 Optimizer 處理後的 data flow 發送給 Client 端。Client 端是 user 與 Flink Cluster 互動的接口,負責提交 job 。
- Actor System: Client 端通過這個系統與 Job Manager 和 Task Managers 溝通,提交 job 和接收 status 的 update。
3. Job Manager
- Dataflow Graph:從 Client 端接收到的 data flow 。
- Scheduler:根據 data flow 調度任務到各個 Task Managers。
- Checkpoint Coordinator:負責管理 data flow 的容錯機制,定期觸發 checkpoint 去儲存當前狀態,用於故障的復原。
4. Task Managers
- Task Slots:每個 Task Manager 包含一定數量的 Task Slots,每個 slot 可以執行一部分 data flow 中的任務。
- Memory & I/O Manager:負責管理記憶體的資源和 input / output 的操作。
- Network Manager:處理 Task Managers 之間的 data 傳輸。
5. 各 component 間的互動
- Data Streams:Data 在 Task Managers 之間通過網路傳輸。
- Task Status、Heartbeats、Statistics:這些資訊從 Task Managers 回報給 Job Manager,用於監控 job 的 status 和 Cluster 的 status。
6. 運作流程
- Submit job:從 Client 端向 Job Manager 提交 job 。
- Deploy / Stop / Cancel Tasks:Job Manager 根據調度策略指揮 Task Managers 執行相應操作。
- Trigger Checkpoints:為了保證 data 處理的一致性和容錯性,他會定期在 Task Managers 上觸發 checkpoint。
形象化譬喻
一言以敝之,Client
是甲方,program code
是甲方專案的需求,透過 Optimizer / Graph Builder
這個甲方的 PM 把需求轉成 spec,這些轉譯好的 spec 就會再透過承辦人(Actor System
)以 Job 的方式轉交給 Job Manager
,client
還會監控各個 job 之間的執行狀況跟各個 job 的 status 與結果的 update 等。
Job Manager
是乙方公司的老闆,也是 Client
唯一看的到的窗口(要是現實世界跟這一樣就好XD),Task Managers
則是負責實作的工程師們。
Job Manager
把大工作分拆成小工作給 Task Managers
們做(Scheduler
),Task Managers
們有各自的 Task Slots
,就好像一個工程師同時只能接 2~3 個工作一樣,他們會自己管理自己的 resource,像是 CPU 跟 Memory,然後確保彼此之間有良好的溝通(在 TM 之間的 Data Stream
)並將事情完成。
Task Managers
們也需要盡量實時的向上匯報 Task Status、Heartbeats、Statistics 給 Job Manager
,但 Job Manager
也不是只有拆小工作這麼簡單,除了考慮各 Task Manager
的 loading 以動態調整 job 給誰、以及各個 job 的 dependencies 之外,他還要定期儲存 checkpoint 以確保 job 是有容錯性的(Checkpoint Coordinator
),不可以一個 Task Manager
掛掉然後所有 jobs 就掛掉,就像是替整個專案立 milestone。
- [推薦工具] 讓程式碼截圖變的美美的吧!VScode CodeSnap 與 3 種同功能線上工具介紹 - 2025-01-05
- [AI 繪圖初級教學] 用 X/Y/Z Plot 比較 Stable Diffusion 的 prompt 與 LoRA 效果 - 2024-12-27
- [AI 繪圖中級篇教學] Stable Diffusion WebUI WD14 Tagger 介紹 - 2024-12-26