0%
Loading ...

[開發筆記] 一篇就懂的 Apache Flink 介紹與架構

image 1731483499347

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 架構

Alt

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 Managerclient 還會監控各個 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。

數據女巫 𝔻.𝕡𝕪𝕤 🔮

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

The reCAPTCHA verification period has expired. Please reload the page.