如何學習Flink?
對于一門計算機技術來說,如何快速學習上手呢?具體的邏輯是什么呢?我認為有以下幾條
- 了解技術的應用場景
- 技術的基本概念,如何使用,以及如何部署(針對大數據組件而言)
- 技術的功能特點
- 技術源碼,優缺點

知識圖譜詳解
核心概念
- Flink的核心概念實際上是流式處理的概念,對于流式數據來說最重要的就是時間
- Time類型Processing TimeEvent TimeIngestion Time
- Watermark 這是Flink的一個難點,在此我想強調的是很多人翻譯為水印,對新手有誤導作用,譯做水位更為合理,Watermark實質上就是一個時間戳,具體場景可以簡化為如何處理遲到的數據,由于在分布式環境下,會受到網絡等影響,數據并不能按時到達,于是就有了watermark機制,在此做簡單說明,圖譜每個節點我都會出詳細文章說明,對于小白而言,我們首先要了解的是這個東西到底是干什么的,而不是一頭扎進去研究,了解---應用--剖析是一個更合理的路線
- Trigger 觸發器又是什么呢?上文中提到watermark是為了遲到的數據,觸發器實際上是決定數據處理完后什么時候落地的
- State什么是狀態?這其實是流式數據的特性,計算數據處理的中間結果,舉個例子,agg操作中state會記錄中間聚合的結果 為什么需要有? 記錄狀態的目的是為了恢復或者重啟任務,試想一下,流數據任務過程突然掛了怎么辦?有了中間的結果記錄,不久能夠做到快速恢復任務?
- 區別(面試常問)核心:
- Flink是標準的流式處理引擎,基于數據驅動,把批處理看作流處理的一種特殊情況,Spark恰恰相反,Spark是微批處理模型,把無界的流處理劃分為一個一個的階段,縮小為一系列的批次,有一個形象的比喻,對于微積分來說,就是劃分為一個一個有界的面積進行逼近計算的。
- 架構:Spark是Driver master worker executor,Flink則是JobManager TaskManager Client
- 時間:Spark只支持處理時間,Flink支持處理事件,事件時間,注入時間,同時有watermark處理滯后數據
- 容錯【大數據核心】:Spark無法做到僅消費一次,Flink可以做到
特性
特性分為兩點,API和架構
- 對于數據處理引擎來說,我們需要解決的問題就是計算,所以核心就是在哪進行計算?計算任務如何找到相應的資源,這就是架構做的事情,核心就是 資源和任務的匹配 API
- 老生常談就是對數據進行的操作,畢竟誰不是調參小能手呢

- SQL/Table API :Table API 和 SQL 借助了 Apache Calcite 來進行查詢的解析,校驗以及優化。它們可以與 DataStream 和 DataSet API 無縫集成,并支持用戶自定義的標量函數,聚合函數以及表值函數。
- DataStream APIDataStream API 為許多通用的流處理操作提供了處理原語。這些操作包括窗口、逐條記錄的轉換操作,在處理事件時進行外部數據庫查詢等ProcessFunction是 Flink 所提供的最具表達力的接口。
- ProcessFunction 可以處理一或兩條輸入數據流中的單個事件或者歸入一個特定窗口內的多個事件。它提供了對于時間和狀態的細粒度控制
- 是否有些深奧?這三者的區別在哪里?在這里可以簡單的認為DataStream是ProcessFunction封裝好的黑盒操作,通過提供一些已經寫好的算子,用戶直接調用就可以,但缺點也是顯而易見的,它并不能滿足所有自定義的需求,也就是無法細粒度的處理,這時候就需要實現底層的ProcessFunction
- Task 真正干活的單位,經過一系列請求過后,Task匹配到資源執行,我們知道,大數據之一就是體現在數據量大,那么對于巨大的數據量來說,就出現了一下幾個問題
- 如何劃分Task呢?
- Task的多少和什么有關的?
- Task掛了怎么辦?如何恢復任務呢
狀態
- 什么是狀態?這也是初學者最容易懵逼的地方
- 狀態有哪些種類,存在哪?誰又在管理狀態呢?這就是狀態管理 狀態存儲 狀態種類
- 區別?種類多種,管理方式多樣,存儲介質多種,區別在哪里?如何選擇?
- 狀態的用途呢?存儲干嘛?這就牽扯到上文我們提到了疑問,Task掛了怎么辦呢?這就牽扯到狀態容錯
- 狀態容錯的機制是什么?checkpoint?那checkpoint的底層實現又是什么呢?
libraries
這里的重難點是CEP
- 什么是CEP? CEP是Flink相當nice的功能,它的語義是復雜事件處理,什么,聽不懂?舉個例子對于常見的電商平臺,是根據用戶停留時長,收藏,加購,點擊次數來判斷用戶是否喜歡這個東西,那我們如何定義滿足這一條件的函數呢?CEP就派上了用場
- Gelly圖處理 對于初學者來說其實沒必要涉及
監控
對于大數據組件來說,長鏈路如何確保整個環節都沒有問題呢?那就需要監控出馬了,點一點,看看web UI就可以更直觀的看到任務運行情況,方便定位數據處理過程中的問題
源碼解析(吹牛篇)
眾所周知,面試官最喜歡的就是問你,熟悉某個技術的源碼嗎?熟悉源碼對于面試來說是有相當的優勢,功利性來說,源碼對于初學者的用途更多在于面試,在這個模塊,我將會列出Flink源碼解析的例子,幫助大家了解源碼【吹?!?/p>
落地實踐
你會Spark Flink Hadoop,精通源碼,但一問到如何針對應用場景進行方案設計,就傻眼了,我就只會寫SQL,寫scala代碼,統計指標,這遠遠是不夠的,技術是為業務服務的,沒有業務也就何談什么技術?這一章我會據一些具體公司實踐已經常見的應用場景
總結
這只是一個思維導圖,也就是個啟蒙貼,以疑問為主,主要是為了讓大家思考為什么這樣做?這些年見多很多的面試者,背書很溜,原理也能巴拉巴拉說出來,一問道為什么這樣做就傻眼了,這多半是面經看多了,面試造火箭,入職只會擰螺絲 。只有知道why才能更好做到 對技術的理解
接下來,我會為大家更新思維導圖知識點的詳細擴展,希望大家支持丫
寫在最后
本文中的圖可能不太清晰,不太清楚是什么原因造成的,獲取高清大圖麻煩私信我 回復 思維導圖 獲取