第1~4章 Flink簡介

Flink是一個框架和分布式流處理引擎,用于對無界和有界數據流進行有狀態計算。

Flink的主要應用場景包括:

  • 電商和市場營銷。如實時數據報表、廣告投放、實時推薦等;
  • 物聯網。如傳感器實時數據采集和顯示、實時報價,交通運輸業等;
  • 物流配送和服務業。如訂單狀態實時更新,通知信息推送等;
  • 銀行和金融業。實時結算和通知推送,實時監測異常行為;

流處理與批處理。spark是典型的批處理,即便是spark streaming,streaming也只是更小的batch。

Lambda架構

Lambda 架構主體是傳統批處理架構的增強。它的“批處理層”(Batch Layer)就是由傳統的批處理器和存儲組成,而“實時層”(Speed Layer)則由低延遲的流處理器實現。數據到達之后,兩層處理雙管齊下,一方面由流處理器進行實時處理,另一方面寫入批處理存儲空間,
等待批處理器批量計算。流處理器快速計算出一個近似結果,并將它們寫入“流處理表”中。而批處理器會定期處理存儲中的數據,將準確的結果寫入批處理表,并從流處理表中刪除不準確的結果。最終,應用程序會合并流處理表和批處理表中的結果,并展示出來。

Lambda 架構的優點非常明顯,它兼具了批處理器和第一代流處理器的特點,同時保證了低延遲和結果的準確性。而它的缺點同樣非常明顯。首先,Lambda 架構本身就很難建立和維護;而且,它需要我們對一個應用程序,做出兩套語義上等效的邏輯實現,因為批處理和流處理是兩套完全獨立的系統,它們的 API 也完全不同。為了實現一個應用,付出了雙倍的工作量,這對程序員顯然不夠友好。

新一代流處理器:Flink。流批一體。

Flink 的核心特性:

  • 高吞吐和低延遲。每秒處理數百萬個事件,毫秒級延遲。
  • 結果的準確性。Flink 提供了事件時間(event-time)和處理時間(processing-time)語義。對于亂序事件流,事件時間語義仍然能提供一致且準確的結果。
  • 精確一次(exactly-once)的狀態一致性保證。
  • 可以連接到最常用的存儲系統,如 Apache Kafka、Apache Cassandra、Elasticsearch、JDBC、Kinesis 和(分布式)文件系統,如 HDFS 和 S3。
  • 高可用。本身高可用的設置,加上與 K8s,YARN 和 Mesos 的緊密集成,再加上從故障中快速恢復和動態擴展任務的能力,Flink 能做到以極少的停機時間實現 7×24 全天候運行。
  • 能夠更新應用程序代碼并將作業(jobs)遷移到不同的 Flink 集群,而不會丟失應用程序的狀態。

Flink分層API:


Flink運行時架構

Flink 的運行時架構中,最重要的就是兩大組件:作業管理器(JobManger)和任務管理器(TaskManager)。對于一個提交執行的作業,JobManager 是真正意義上的“管理者”(Master),負責管理調度,所以在不考慮高可用的情況下只能有一個;而 TaskManager 是“工作者”(Worker、Slave),負責執行任務處理數據,所以可以有一個或多個。Flink 的作業提交和任務處理時的系統如圖 4-1 所示。


作業提交流程

如上圖,具體步驟如下:
(1)一般情況下,由客戶端(App)通過分發器提供的REST接口,將作業提交給JobManager;
(2)由分發器啟動 JobMaster,并將作業(包含 JobGraph)提交給JobMaster;
(3)JobMaster 將 JobGraph 解析為可執行的 ExecutionGraph,得到所需的資源數量,然后向資源管理器請求任務槽資源(slots);
(4)資源管理器判斷當前是否由足夠的可用資源;如果沒有,啟動新的 TaskManager;
(5)TaskManager 啟動之后,向 ResourceManager 注冊自己的可用任務槽(slots);
(6)資源管理器通知 TaskManager 為新的作業提供 slots;
(7)TaskManager 連接到對應的 JobMaster,提供 slots;
(8)JobMaster 將需要執行的任務分發給 TaskManager;
(9)TaskManager 執行任務,互相之間可以交換數據。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容