第01講:Flink 的應(yīng)用場景和架構(gòu)模型

Flink系列文章

  1. 第01講:Flink 的應(yīng)用場景和架構(gòu)模型
  2. 第02講:Flink 入門程序 WordCount 和 SQL 實現(xiàn)
  3. 第03講:Flink 的編程模型與其他框架比較
  4. 第04講:Flink 常用的 DataSet 和 DataStream API
  5. 第05講:Flink SQL & Table 編程和案例
  6. 第06講:Flink 集群安裝部署和 HA 配置
  7. 第07講:Flink 常見核心概念分析
  8. 第08講:Flink 窗口尖啡、時間和水印
  9. 第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ù)載情況蓝撇?

......

img

我們可以看到果复,數(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ù)倉庫的過程。

img

傳統(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)一。
img

事件驅(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ù)女嘲,所以具有更高的吞吐和更低的延遲。

img

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 的分層模型

img

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ì)講解骗露。

img

從上圖中可以看到,在上面的 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)中對于時間的特殊需求昼钻。

img

其他

此外掸屡,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)域最鋒利的武器魂莫!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末还蹲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子耙考,更是在濱河造成了極大的恐慌谜喊,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倦始,死亡現(xiàn)場離奇詭異斗遏,居然都是意外死亡,警方通過查閱死者的電腦和手機鞋邑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門诵次,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人枚碗,你說我怎么就攤上這事逾一。” “怎么了肮雨?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵遵堵,是天一觀的道長。 經(jīng)常有香客問我怨规,道長陌宿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任波丰,我火速辦了婚禮壳坪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘掰烟。我一直安慰自己弥虐,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布媚赖。 她就那樣靜靜地躺著霜瘪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪惧磺。 梳的紋絲不亂的頭發(fā)上颖对,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音磨隘,去河邊找鬼缤底。 笑死顾患,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的个唧。 我是一名探鬼主播江解,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼徙歼!你這毒婦竟也來了犁河?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤魄梯,失蹤者是張志新(化名)和其女友劉穎桨螺,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酿秸,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡灭翔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辣苏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肝箱。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖稀蟋,靈堂內(nèi)的尸體忽然破棺而出煌张,到底是詐尸還是另有隱情,我是刑警寧澤糊治,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布唱矛,位于F島的核電站罚舱,受9級特大地震影響井辜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜管闷,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一粥脚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧包个,春花似錦刷允、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至糯而,卻和暖如春天通,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背熄驼。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工像寒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留烘豹,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓诺祸,卻偏偏與公主長得像携悯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子筷笨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容