本文開頭附:Flink 學(xué)習(xí)路線系列 ^ _ ^
??隨著5G時(shí)代的到來,未來都將會(huì)是萬物互聯(lián),各種各樣的設(shè)備都會(huì)與網(wǎng)絡(luò)連接起來。未來有無人駕駛、很多的設(shè)備都能接入到5G,會(huì)有大量的數(shù)據(jù)產(chǎn)生。
??以后這些數(shù)據(jù)都將需要做實(shí)時(shí)分析,有人把Flink歸類為第三代大數(shù)據(jù)引擎。第一代:Hadoop、第二代:Spark 。
1.什么是 Flink
??Flink官網(wǎng):https://flink.apache.org/
??Apache Flink 是一個(gè)分布式大數(shù)據(jù)處理引擎,可對(duì)1.有限數(shù)據(jù)流和2.無線數(shù)據(jù)流進(jìn)行有狀態(tài)計(jì)算??刹渴鹪诟鞣N集群環(huán)境,對(duì)各種大小的數(shù)據(jù)規(guī)模進(jìn)行快速計(jì)算。

名詞解釋:
-
有限數(shù)據(jù)流:即數(shù)據(jù)已經(jīng)產(chǎn)生,數(shù)據(jù)大小已經(jīng)確定。數(shù)據(jù)有限,可以做離線計(jì)算; -
無限數(shù)據(jù)流:即數(shù)據(jù)流一旦產(chǎn)生,不知道什么時(shí)候結(jié)束。比如:數(shù)據(jù)實(shí)時(shí)寫入到Kafka。數(shù)據(jù)無限,可以做實(shí)時(shí)計(jì)算。
1.1.Flink設(shè)計(jì)初衷
??Flink 設(shè)計(jì)之初,就是為實(shí)時(shí)計(jì)算而設(shè)計(jì)的。但是因?yàn)槠溆?jì)算引擎過于強(qiáng)大,所以也可以做離線計(jì)算。它可以部署在各種各樣的集群中,比如 Flink自己的 standalone 集群,flink on yarn部署,F(xiàn)link 還可以跑在K8S上,F(xiàn)link 還可以跑在各種各樣的集群上。Flink為了開發(fā)測(cè)試比較方便,還可以使用單機(jī)模式。可以對(duì)各種大小規(guī)模的數(shù)據(jù)進(jìn)行快速計(jì)算。==特點(diǎn)就是:快。==
1.2.Flink歷史介紹
??早在 2008年,F(xiàn)link 的前身已經(jīng)是柏林理工大學(xué)一個(gè)研究性項(xiàng)目,在 2014 年被 Apache 孵化器所接受,然后迅速成為了 ASF(Apache Software Foundation)的頂級(jí)項(xiàng)目之一。
??Flink 的商業(yè)母公司 Data Artisans,位于柏林,公司成立于 2014年,共獲得兩輪融資共計(jì) 650萬歐,該公司旨在為企業(yè)提供大規(guī)模數(shù)據(jù)處理解決方案,使企業(yè)可以管理和部署實(shí)時(shí)數(shù)據(jù),實(shí)時(shí)反饋數(shù)據(jù),做更快、更精準(zhǔn)的商業(yè)決策。
??目前,ING,Netflix 和 Uber 等企業(yè)也都通過 Apache Flink 平臺(tái)部署大規(guī)模分布式應(yīng)用,如實(shí)時(shí)數(shù)據(jù)分析、機(jī)器學(xué)習(xí)、搜索、排序推薦和欺詐風(fēng)險(xiǎn)等。
??2019年1月8日,阿里巴巴以9000萬歐元收購(gòu) Data Artisans 公司。從此以后,F(xiàn)link 的控制權(quán)就掌握在了阿里手中。
1.3.Logo介紹

??在德語中,F(xiàn)link 一詞表示快速和靈巧,項(xiàng)目采用一只松鼠的彩色圖案作為L(zhǎng)ogo,這不僅是因?yàn)樗墒缶哂锌焖俸挽`巧的特點(diǎn),還因?yàn)榘亓值乃墒笥幸环N迷人的紅棕色,而 Flink 的松鼠 Logo 擁有可愛的尾巴,尾巴的顏色與Apache軟件基金會(huì)的logo顏色相呼應(yīng)(Apache logo雞毛撣子和松鼠尾巴相結(jié)合),也就是說,這是一只具有 Apache 風(fēng)格的松鼠。
2.Flink特點(diǎn)
- 批流統(tǒng)一
- 支持高吞吐、低延遲、高性能的流處
- 支持帶有事件事件的窗口(Window)操作
- 支持有狀態(tài)計(jì)算的 Exactly-once 語義
- 支持高度靈活的窗口(Window)操作,支持基于 time、count、session 窗口操作
- 支持具有 Backpressure 功能的持續(xù)流模型
- 支持基于輕量級(jí)分布式快照(Snapshot)實(shí)現(xiàn)的容錯(cuò)
- 支持迭代計(jì)算
- Flink 在 JVM內(nèi)部實(shí)現(xiàn)了自己的內(nèi)存管理
- 支持程序自動(dòng)優(yōu)化:避免特定情況下 Shuffle、排序等昂貴操作,中間結(jié)果有必要進(jìn)行緩存。
3.Flink 與其他框架的對(duì)比
| 框架 | 優(yōu)點(diǎn) | 缺點(diǎn) |
|---|---|---|
| Storm | 低延遲 | 吞吐量第、不能保證 exactly-once、編程 API 不豐富 |
| Spark Streaming | 吞吐量高、可以保證 exactly-once、編程 API 豐富 | 延遲較高 |
| Storm | 低延遲、吞吐量高、可以保證 exactly-once、編程API豐富(具有Storm+Spark優(yōu)勢(shì)) | 快速迭代中,API 變化比較快 |

Spark
??Spark 就是為離線計(jì)算而設(shè)計(jì)的,在Spark生態(tài)體系中,不論是流處理還是批處理,底層引擎都是Spark Core。Spark Streaming 將微批次小任務(wù)不停地提交到 Spark 引擎,從而實(shí)現(xiàn)準(zhǔn)實(shí)時(shí)計(jì)算,Spark Streaming 只不過是一種特殊的批處理而已。

Flink
??Flink 就是為實(shí)時(shí)計(jì)算而設(shè)計(jì)的,F(xiàn)link 可以同時(shí)實(shí)現(xiàn)批處理和流處理,F(xiàn)link 將批處理(即有界數(shù)據(jù)/離線處理)視作一種特殊的流處理。
??Flink 部署,可以使用本地Local模式,也可以使用Cluster集群模式(可以部署 standalone,yarn上,也可以部署在cloud 云上)。

4.Flink 架構(gòu)體系簡(jiǎn)介

??Flink 真正用來做執(zhí)行操作的,叫做 Worker。進(jìn)程在不同的環(huán)境模式下運(yùn)行,進(jìn)程名稱不同。如:使用 Standalone集群模式啟動(dòng),JobManager 叫做 StandaloneSessionClusterEntrypoint,TaskManager叫做 TaskManagerRunner,使用 yarn 集群?jiǎn)?dòng),進(jìn)程名稱又會(huì)有所不同。
JobManager介紹:
??也稱之為 Master,用于協(xié)調(diào)分布式執(zhí)行,它用來調(diào)度 Task,協(xié)調(diào)檢查點(diǎn),協(xié)調(diào)失敗時(shí)恢復(fù)等。Flink 運(yùn)行時(shí)至少存在一個(gè) Master,如果配置高可用模式則會(huì)存在多個(gè) Master,他們其中有一個(gè)是 Leader,而其他的都是 Standby。
TaskManager介紹:
??也稱之為 Worker,用于執(zhí)行一個(gè) dataflow 的 Task、數(shù)據(jù)緩沖 和 Data Stream 的數(shù)據(jù)交換,F(xiàn)link 運(yùn)行時(shí)至少會(huì)存在一個(gè) TaskManager。JobManager 和 TaskManager 可以直接運(yùn)行在物理機(jī)上,或者運(yùn)行在 yarn 這樣的資源調(diào)度框架。TaskManager 通過網(wǎng)絡(luò)連接到JobManager,通過 RPC 通信告知自身的可用性進(jìn)而獲得任務(wù)分配。
Flink架構(gòu)流程介紹:
??用于工作的叫做 TaskManager(又叫:Worker)。TaskManager 里面以后運(yùn)行著Task(又叫:subTask)。TaskSlot 中就會(huì)運(yùn)行著真正計(jì)算的任務(wù) Task。
??TaskManager 相當(dāng)于用來給 Task 提供執(zhí)行環(huán)境。JobManager相當(dāng)于是主節(jié)點(diǎn),TaskManager相當(dāng)于是從節(jié)點(diǎn)。JobManager用來負(fù)責(zé)管理,==TaskManager用來負(fù)責(zé)執(zhí)行具體的Task,他們之間也要通過網(wǎng)絡(luò)進(jìn)行RPC通信。RPC通信,底層使用的是Akka。== 我們還會(huì)用到一個(gè)客戶端。這個(gè)客戶端用來提交任務(wù)(左圖中的Client)。
??客戶端提交任務(wù),首先會(huì)與 JobManager 進(jìn)行通信。我們?cè)诒镜貙懗绦?。程序中?huì)構(gòu)建成一個(gè)類似于 Spark 的 DAG(Flink 中叫做Dataflow graph),將 Dataflow graph 提交到 JobManager。JobManager 會(huì)把這個(gè)Dataflow graph 切分成多個(gè) Task。將 Task 調(diào)度到TaskManager中進(jìn)行執(zhí)行。(和Spark很相似)
??使用客戶端提交任務(wù),①可以通過命令來提交 ②也可以通過 Web 頁(yè)面提交。
5.Sprak 和 Flink角色對(duì)比
| 含義 | Spark | Flink |
|---|---|---|
| 離散流 | DStream | DataStream |
| 算子 | Transformation | Transformation |
| Action類算子(xxxx預(yù)留) | Action | Sink |
| 任務(wù) | Task | SubTask |
| 流水線 | Pipeline | Oprator chains |
| 有向無環(huán)圖(Directed Acyclic Graph) | DAG | DataFlow Graph |
| xxxx預(yù)留 | Master + Driver | JobManager |
| xxxx預(yù)留 | Worker+ Executor | TaskManager |
博主寫作不易,來個(gè)關(guān)注唄
求關(guān)注、求點(diǎn)贊,加個(gè)關(guān)注不迷路 ヾ(?°?°?)??
博主不能保證寫的所有知識(shí)點(diǎn)都正確,但是能保證純手敲,錯(cuò)誤也請(qǐng)指出,望輕噴 Thanks?(?ω?)?