Flink系列文章
- 第01講:Flink 的應(yīng)用場景和架構(gòu)模型
- 第02講:Flink 入門程序 WordCount 和 SQL 實現(xiàn)
- 第03講:Flink 的編程模型與其他框架比較
- 第04講:Flink 常用的 DataSet 和 DataStream API
- 第05講:Flink SQL & Table 編程和案例
- 第06講:Flink 集群安裝部署和 HA 配置
- 第07講:Flink 常見核心概念分析
- 第08講:Flink 窗口尖啡、時間和水印
- 第09講:Flink 狀態(tài)與容錯
你好尤辱,歡迎來到第 01 課時痴颊,本課時我們主要介紹 Flink 的應(yīng)用場景和架構(gòu)模型廷没。
實時計算最好的時代
在過去的十年里护昧,面向數(shù)據(jù)時代的實時計算技術(shù)接踵而至滥玷。從我們最初認(rèn)識的 Storm两疚,再到 Spark 的異軍突起量窘,迅速占領(lǐng)了整個實時計算領(lǐng)域埃撵。直到 2019 年 1 月底赵颅,阿里巴巴內(nèi)部版本 Flink 正式開源!一石激起千層浪暂刘,F(xiàn)link 開源的消息立刻刷爆朋友圈饺谬,整個大數(shù)據(jù)計算領(lǐng)域一直以來由 Spark 獨領(lǐng)風(fēng)騷,瞬間成為兩強爭霸的時代谣拣。
Apache Flink(以下簡稱 Flink)以其先進的設(shè)計理念募寨、強大的計算能力備受關(guān)注,如何將 Flink 快速應(yīng)用在生產(chǎn)環(huán)境中森缠,更好的與現(xiàn)有的大數(shù)據(jù)生態(tài)技術(shù)完美結(jié)合拔鹰,充分挖掘數(shù)據(jù)的潛力,成為了眾多開發(fā)者面臨的難題贵涵。
Flink 實際應(yīng)用場景
Flink 自從 2019 年初開源以來列肢,迅速成為大數(shù)據(jù)實時計算領(lǐng)域炙手可熱的技術(shù)框架。作為 Flink 的主要貢獻者阿里巴巴率先將其在全集團進行推廣使用宾茂,另外由于 Flink 天然的流式特性瓷马,更為領(lǐng)先的架構(gòu)設(shè)計,使得 Flink 一出現(xiàn)便在各大公司掀起了應(yīng)用的熱潮刻炒。
阿里巴巴决采、騰訊、百度坟奥、字節(jié)跳動树瞭、滴滴、華為等眾多互聯(lián)網(wǎng)公司已經(jīng)將 Flink 作為未來技術(shù)重要的發(fā)力點爱谁,迫切地在各自公司內(nèi)部進行技術(shù)升級和推廣使用晒喷。同時,F(xiàn)link 已經(jīng)成為 Apache 基金會和 GitHub 社區(qū)最為活躍的項目之一访敌。
我們來看看 Flink 支持的眾多應(yīng)用場景凉敲。
實時數(shù)據(jù)計算
如果你對大數(shù)據(jù)技術(shù)有所接觸,那么下面的這些需求場景你應(yīng)該并不陌生:
阿里巴巴每年雙十一都會直播,實時監(jiān)控大屏是如何做到的爷抓?
公司想看一下大促中銷量最好的商品 TOP5势决?
我是公司的運維,希望能實時接收到服務(wù)器的負(fù)載情況蓝撇?
......
我們可以看到果复,數(shù)據(jù)計算場景需要從原始數(shù)據(jù)中提取有價值的信息和指標(biāo),比如上面提到的實時銷售額渤昌、銷量的 TOP5虽抄,以及服務(wù)器的負(fù)載情況等。
傳統(tǒng)的分析方式通常是利用批查詢独柑,或?qū)⑹录ㄉa(chǎn)上一般是消息)記錄下來并基于此形成有限數(shù)據(jù)集(表)構(gòu)建應(yīng)用來完成迈窟。為了得到最新數(shù)據(jù)的計算結(jié)果,必須先將它們寫入表中并重新執(zhí)行 SQL 查詢忌栅,然后將結(jié)果寫入存儲系統(tǒng)比如 MySQL 中车酣,再生成報告。
Apache Flink 同時支持流式及批量分析應(yīng)用索绪,這就是我們所說的批流一體骇径。Flink 在上述的需求場景中承擔(dān)了數(shù)據(jù)的實時采集、實時計算和下游發(fā)送者春。
實時數(shù)據(jù)倉庫和 ETL
ETL(Extract-Transform-Load)的目的是將業(yè)務(wù)系統(tǒng)的數(shù)據(jù)經(jīng)過抽取破衔、清洗轉(zhuǎn)換之后加載到數(shù)據(jù)倉庫的過程。
傳統(tǒng)的離線數(shù)據(jù)倉庫將業(yè)務(wù)數(shù)據(jù)集中進行存儲后钱烟,以固定的計算邏輯定時進行 ETL 和其他建模后產(chǎn)出報表等應(yīng)用晰筛。離線數(shù)據(jù)倉庫主要是構(gòu)建 T+1 的離線數(shù)據(jù),通過定時任務(wù)每天拉取增量數(shù)據(jù)拴袭,然后創(chuàng)建各個業(yè)務(wù)相關(guān)的主題維度數(shù)據(jù)读第,對外提供 T+1 的數(shù)據(jù)查詢接口。
上圖展示了離線數(shù)據(jù)倉庫 ETL 和實時數(shù)據(jù)倉庫的差異拥刻,可以看到離線數(shù)據(jù)倉庫的計算和數(shù)據(jù)的實時性均較差怜瞒。數(shù)據(jù)本身的價值隨著時間的流逝會逐步減弱,因此數(shù)據(jù)發(fā)生后必須盡快的達到用戶的手中般哼,實時數(shù)倉的構(gòu)建需求也應(yīng)運而生吴汪。
實時數(shù)據(jù)倉庫的建設(shè)是“數(shù)據(jù)智能 BI”必不可少的一環(huán),也是大規(guī)模數(shù)據(jù)應(yīng)用中必然面臨的挑戰(zhàn)蒸眠。
Flink 在實時數(shù)倉和實時 ETL 中有天然的優(yōu)勢:
- 狀態(tài)管理漾橙,實時數(shù)倉里面會進行很多的聚合計算,這些都需要對于狀態(tài)進行訪問和管理楞卡,F(xiàn)link 支持強大的狀態(tài)管理霜运;
- 豐富的 API脾歇,Flink 提供極為豐富的多層次 API,包括 Stream API淘捡、Table API 及 Flink SQL藕各;
- 生態(tài)完善,實時數(shù)倉的用途廣泛焦除,F(xiàn)link 支持多種存儲(HDFS座韵、ES 等);
- 批流一體踢京,Flink 已經(jīng)在將流計算和批計算的 API 進行統(tǒng)一。
事件驅(qū)動型應(yīng)用
你是否有這樣的需求:
我們公司有幾萬臺服務(wù)器宦棺,希望能從服務(wù)器上報的消息中將 CPU瓣距、MEM、LOAD 信息分離出來做分析代咸,然后觸發(fā)自定義的規(guī)則進行報警蹈丸?
我是公司的安全運維人員,希望能從每天的訪問日志中識別爬蟲程序呐芥,并且進行 IP 限制逻杖?
......
事件驅(qū)動型應(yīng)用是一類具有狀態(tài)的應(yīng)用,它從一個或多個事件流提取數(shù)據(jù)思瘟,并根據(jù)到來的事件觸發(fā)計算荸百、狀態(tài)更新或其他外部動作。
在傳統(tǒng)架構(gòu)中滨攻,我們需要讀寫遠(yuǎn)程事務(wù)型數(shù)據(jù)庫够话,比如 MySQL。在事件驅(qū)動應(yīng)用中數(shù)據(jù)和計算不會分離光绕,應(yīng)用只需訪問本地(內(nèi)存或磁盤)即可獲取數(shù)據(jù)女嘲,所以具有更高的吞吐和更低的延遲。
Flink 的以下特性完美的支持了事件驅(qū)動型應(yīng)用:
- 高效的狀態(tài)管理诞帐,F(xiàn)link 自帶的 State Backend 可以很好的存儲中間狀態(tài)信息欣尼;
- 豐富的窗口支持,F(xiàn)link 支持包含滾動窗口停蕉、滑動窗口及其他窗口愕鼓;
- 多種時間語義,F(xiàn)link 支持 Event Time慧起、Processing Time 和 Ingestion Time拒啰;
- 不同級別的容錯,F(xiàn)link 支持 At Least Once 或 Exactly Once 容錯級別完慧。
小結(jié)
Apache Flink 從底層支持了針對多種不同場景的應(yīng)用開發(fā)谋旦。
Flink 的主要特性包括:批流一體剩失、Exactly-Once、強大的狀態(tài)管理等册着。同時拴孤,F(xiàn)link 還支持運行在包括 YARN、 Mesos甲捏、Kubernetes 在內(nèi)的多種資源管理框架上演熟。阿里巴巴已經(jīng)率先將 Flink 在全集團進行推廣使用,事實證明司顿,F(xiàn)link 已經(jīng)可以擴展到數(shù)千核心芒粹,其狀態(tài)可以達到 TB 級別,且仍能保持高吞吐大溜、低延遲的特性化漆。
因此,F(xiàn)link 已經(jīng)成為我們在實時計算的領(lǐng)域的第一選擇钦奋。
Flink 的架構(gòu)模型
Flink 的分層模型
Flink 自身提供了不同級別的抽象來支持我們開發(fā)流式或者批量處理程序座云,上圖描述了 Flink 支持的 4 種不同級別的抽象。
對于我們開發(fā)者來說付材,大多數(shù)應(yīng)用程序不需要上圖中的最低級別的 Low-level 抽象朦拖,而是針對 Core API 編程, 比如 DataStream API(有界/無界流)和 DataSet API (有界數(shù)據(jù)集)厌衔。這些流暢的 API 提供了用于數(shù)據(jù)處理的通用構(gòu)建塊璧帝,比如各種形式用戶指定的轉(zhuǎn)換、連接富寿、聚合裸弦、窗口、狀態(tài)等作喘。
Table API 和 SQL 是 Flink 提供的更為高級的 API 操作理疙,F(xiàn)link SQL 是 Flink 實時計算為簡化計算模型,降低用戶使用實時計算門檻而設(shè)計的一套符合標(biāo)準(zhǔn) SQL 語義的開發(fā)語言泞坦。
Flink 的數(shù)據(jù)流模型
Flink 程序的基礎(chǔ)構(gòu)建模塊是流(Streams)與轉(zhuǎn)換(Transformations)窖贤,每一個數(shù)據(jù)流起始于一個或多個 Source,并終止于一個或多個 Sink贰锁。數(shù)據(jù)流類似于有向無環(huán)圖(DAG)赃梧。
我們以一個最經(jīng)典的 WordCount 計數(shù)程序舉例:
![img](https://upload-images.jianshu.io/upload_images/4906809-7368c0aeefeac6a3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
在上圖中,程序消費 Kafka 數(shù)據(jù)豌熄,這便是我們的 Source 部分授嘀。
然后經(jīng)過 Map、Keyby锣险、TimeWindow 等方法進行邏輯計算蹄皱,該部分就是我們的 Transformation 轉(zhuǎn)換部分览闰,而其中的 Map、Keyby巷折、TimeWindow 等方法被稱為算子压鉴。通常,程序中的轉(zhuǎn)換與數(shù)據(jù)流中的算子之間存在對應(yīng)關(guān)系锻拘,有時一個轉(zhuǎn)換可能包含多個轉(zhuǎn)換算子油吭。
最后,經(jīng)過計算的數(shù)據(jù)會被寫入到我們執(zhí)行的文件中署拟,這便是我們的 Sink 部分婉宰。
實際上面對復(fù)雜的生產(chǎn)環(huán)境,F(xiàn)link 任務(wù)大都是并行進行和分布在各個計算節(jié)點上推穷。在 Flink 任務(wù)執(zhí)行期間心包,每一個數(shù)據(jù)流都會有多個分區(qū),并且每個算子都有多個算子任務(wù)并行進行缨恒。算子子任務(wù)的數(shù)量是該特定算子的并行度****(Parallelism),對并行度的設(shè)置是 Flink 任務(wù)進行調(diào)優(yōu)的重要手段轮听,我們會在后面的課程中詳細(xì)講解骗露。
從上圖中可以看到,在上面的 map 和 keyBy/window 之間血巍,以及 keyBy/window 和 Sink 之間萧锉,因為并行度的差異,數(shù)據(jù)流都進行了重新分配述寡。
Flink 中的窗口和時間
窗口和時間是 Flink 中的核心概念之一柿隙。在實際成產(chǎn)環(huán)境中,對數(shù)據(jù)流上的聚合需要由窗口來劃定范圍鲫凶,比如“計算過去的 5 分鐘”或者“最后 100 個元素的和”禀崖。
Flink 支持了多種窗口模型比如滾動窗口(Tumbling Window)、滑動窗口(Sliding Window)及會話窗口(Session Window)等螟炫。
下圖展示了 Flink 支持的多種窗口模型:
![img](https://upload-images.jianshu.io/upload_images/4906809-d3fe51d14eaced51.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
同時波附,F(xiàn)link 支持了事件時間(Event Time)、攝取時間(Ingestion Time)和處理時間(Processing Time)三種時間語義用來滿足實際生產(chǎn)中對于時間的特殊需求昼钻。
其他
此外掸屡,F(xiàn)link 自身還支持了有狀態(tài)的算子操作、容錯機制然评、Checkpoint仅财、Exactly-once 語義等更多高級特性,來支持用戶在不同的業(yè)務(wù)場景中的需求碗淌。
點擊這里下載本課程源碼盏求。
總結(jié)
本課時從實時計算的背景入手介紹了當(dāng)前實時計算的發(fā)展歷程抖锥,F(xiàn)link 作為實時計算領(lǐng)域的一匹黑馬,先進的設(shè)計思想风喇、強大的性能和豐富的業(yè)務(wù)場景支持宁改,已經(jīng)是我們開發(fā)者必須要學(xué)習(xí)的技能之一,F(xiàn)link 已經(jīng)成為實時計算領(lǐng)域最鋒利的武器魂莫!