前言
計(jì)算引擎
大數(shù)據(jù)計(jì)算引擎分為離線計(jì)算和實(shí)時(shí)計(jì)算,離線計(jì)算就是我們通常說(shuō)的批計(jì)算屠缭,代表是Hadoop MapReduce苗缩、Hive等大數(shù)據(jù)技術(shù)。實(shí)時(shí)計(jì)算也被稱作流計(jì)算整慎,代表是Storm脏款、Spark Streaming、Flink等大數(shù)據(jù)技術(shù)裤园。
計(jì)算引擎也在不斷更新迭代撤师,下圖展示的是每一代計(jì)算引擎的代表,從第一代的Hadoop MapReduce比然,到第二代的Spark丈氓,再到第三代的Flink技術(shù)周循,從批處理到微批强法,再到真正的流式計(jì)算。
實(shí)時(shí)計(jì)算
實(shí)時(shí)計(jì)算是相對(duì)離線計(jì)算的概念湾笛,重要是時(shí)效性饮怯。舉個(gè)例子,我們知道離線計(jì)算通常是天級(jí)別的計(jì)算任務(wù)嚎研,比如統(tǒng)計(jì)一天的新增用戶蓖墅,商品銷量库倘,銷售收入等。但是實(shí)時(shí)計(jì)算是只要有事件發(fā)生论矾,統(tǒng)計(jì)結(jié)果就會(huì)發(fā)生變化教翩,比如有一個(gè)新用戶注冊(cè)登錄了,那么我們的新增用戶數(shù)就發(fā)生了變化贪壳,商品只要新增一個(gè)銷售饱亿,銷量就會(huì)發(fā)生變化,銷售收入也會(huì)變化闰靴。所以實(shí)時(shí)計(jì)算讓我們能更及時(shí)了解我們的現(xiàn)狀彪笼,以及根據(jù)實(shí)時(shí)的統(tǒng)計(jì)結(jié)果做出決策,決策也更加具有時(shí)效性蚂且。
一配猫、Flink介紹
Flink 是 Apache 基金會(huì)旗下的一個(gè)開(kāi)源大數(shù)據(jù)處理框架。應(yīng)用于分布式杏死、高性能泵肄、高可用的數(shù)據(jù)流應(yīng)用程序∈缫恚可以處理有限數(shù)據(jù)流和無(wú)限數(shù)據(jù)流凡伊,即能夠處理有邊界和無(wú)邊界的數(shù)據(jù)流。無(wú)邊界的數(shù)據(jù)流就是真正意義上的流數(shù)據(jù)窒舟,所以Flink是支持流計(jì)算的系忙。有邊界的數(shù)據(jù)流就是批數(shù)據(jù),所以也支持批處理的惠豺。不過(guò)Flink在流處理上的應(yīng)用比在批處理上的應(yīng)用更加廣泛银还,統(tǒng)一批處理和流處理也是Flink目標(biāo)之一。Flink可以部署在各種集群環(huán)境洁墙,可以對(duì)各種大小規(guī)模的數(shù)據(jù)進(jìn)行快速計(jì)算蛹疯。
隨著大數(shù)據(jù)技術(shù)在各行各業(yè)的廣泛應(yīng)用,要求能對(duì)海量數(shù)據(jù)進(jìn)行實(shí)時(shí)處理的需求越來(lái)越多热监,同時(shí)數(shù)據(jù)處理的業(yè)務(wù)邏輯也越來(lái)越復(fù)雜捺弦,傳統(tǒng)的批處理方式和早期的流式處理框架也越來(lái)越難以在延遲性、吞吐量孝扛、容錯(cuò)能力以及使用便捷性等方面滿足業(yè)務(wù)日益苛刻的要求列吼。其中流式計(jì)算的典型代表是Storm和Flink技術(shù)。它們數(shù)據(jù)處理的延遲都是亞秒級(jí)低延遲苦始,但是Flink相比Storm還有其他的一些優(yōu)勢(shì)寞钥,比如支持exactly once語(yǔ)義,確保數(shù)據(jù)不會(huì)重復(fù)陌选。 Storm支持at least once語(yǔ)義理郑,保證數(shù)據(jù)不會(huì)丟失蹄溉。保證數(shù)據(jù)不會(huì)重復(fù)的代價(jià)很高,比如數(shù)據(jù)下游操作屬于冪等操作您炉。另外從測(cè)試結(jié)果來(lái)看柒爵,F(xiàn)link在低延遲的基礎(chǔ)上還能保證高吞吐,優(yōu)勢(shì)明顯赚爵。
在這種形勢(shì)下餐弱,新型流式處理框架Flink通過(guò)創(chuàng)造性地把現(xiàn)代大規(guī)模并行處理技術(shù)應(yīng)用到流式處理中來(lái),極大地改善了以前的流式處理框架所存在的問(wèn)題囱晴。
目前膏蚓,F(xiàn)link 已經(jīng)成為各大公司大數(shù)據(jù)實(shí)時(shí)處理的發(fā)力重點(diǎn)。
1.1 Flink 的源起和設(shè)計(jì)理念
Flink 誕生于歐洲的一個(gè)大數(shù)據(jù)研究項(xiàng)目 StratoSphere畸写。它是由 3 所地處柏林的大學(xué)和歐洲其他一些大學(xué)在 2010~2014 年共同進(jìn)行的研究項(xiàng)目驮瞧,由柏林理工大學(xué)的教授沃克爾·馬爾科(Volker Markl)領(lǐng)銜開(kāi)發(fā)。早期枯芬,F(xiàn)link 是做 Batch 計(jì)算的论笔,但是在 2014 年, StratoSphere 里面的核心成員孵化出 Flink千所,同年將 Flink 捐贈(zèng) Apache狂魔,并在后來(lái)成為 Apache 的頂級(jí)大數(shù)據(jù)項(xiàng)目,同時(shí) Flink 計(jì)算的主流方向被定位為 Streaming淫痰, 即用流式計(jì)算來(lái)做所有大數(shù)據(jù)的計(jì)算最楷,這就是 Flink 技術(shù)誕生的背景。
2014 年 Flink 作為主攻流計(jì)算的大數(shù)據(jù)引擎開(kāi)始在開(kāi)源大數(shù)據(jù)行業(yè)內(nèi)嶄露頭角待错。區(qū)別于Storm籽孙、Spark Streaming 以及其他流式計(jì)算引擎的是:它不僅是一個(gè)高吞吐、低延遲的計(jì)算引擎火俄,同時(shí)還提供很多高級(jí)的功能犯建。比如它提供了有狀態(tài)的計(jì)算,支持狀態(tài)管理瓜客,支持強(qiáng)一致性的數(shù)據(jù)語(yǔ)義以及支持 基于Event Time的WaterMark對(duì)延遲或亂序的數(shù)據(jù)進(jìn)行處理等适瓦。
發(fā)展歷史
- 2014 年 8 月,F(xiàn)link 第一個(gè)版本 0.6 正式發(fā)布(至于 0.5 之前的版本谱仪,那就是在
Stratosphere 名下的了)玻熙。與此同時(shí) Fink 的幾位核心開(kāi)發(fā)者創(chuàng)辦了 Data Artisans 公司,主要做 Fink 的商業(yè)應(yīng)用芽卿,幫助企業(yè)部署大規(guī)模數(shù)據(jù)處理解決方案揭芍。 - 2014 年 12 月胳搞,F(xiàn)link 項(xiàng)目完成了孵化卸例,一躍成為 Apache 軟件基金會(huì)的頂級(jí)項(xiàng)目称杨。
- 2015 年 4 月,F(xiàn)link 發(fā)布了里程碑式的重要版本 0.9.0筷转,很多國(guó)內(nèi)外大公司也正是從這
時(shí)開(kāi)始關(guān)注姑原、并參與到 Flink 社區(qū)建設(shè)的。 - 2019 年 1 月呜舒,長(zhǎng)期對(duì) Flink 投入研發(fā)的阿里巴巴锭汛,以 9000 萬(wàn)歐元的價(jià)格收購(gòu)了 Data
Artisans 公司;之后又將自己的內(nèi)部版本 Blink 開(kāi)源袭蝗,繼而與 8 月份發(fā)布的 Flink 1.9.0
版本進(jìn)行了合并唤殴。自此之后,F(xiàn)link 被越來(lái)越多的人所熟知到腥,成為當(dāng)前最火的新一代
大數(shù)據(jù)處理框架朵逝。
地址
- Flink 的官網(wǎng)主頁(yè)地址:https://flink.apache.org/
- Flink 的中文主頁(yè)地址:https://flink.apache.org/zh/
- Flink 的中文社區(qū)地址:https://flink-learning.org.cn/activity
- 阿里云Flink技術(shù)地址:https://help.aliyun.com/product/45029.html
Logo
在德語(yǔ)中,“flink”一詞表示“快速乡范、靈巧”配名。項(xiàng)目的 logo 是一只彩色的松鼠,當(dāng)然了晋辆,
這不僅是因?yàn)?Apache 大數(shù)據(jù)項(xiàng)目對(duì)動(dòng)物的喜好(是否聯(lián)想到了 Hadoop渠脉、Hive?)瓶佳,更是因?yàn)樗墒筮@種小動(dòng)物完美地體現(xiàn)了“快速芋膘、靈巧”的特點(diǎn)。關(guān)于 logo 的顏色霸饲,還一個(gè)有趣的緣由:柏林當(dāng)?shù)氐乃墒蠓浅F了魃停伾敲匀说募t棕色;而 Apache 軟件基金會(huì)的 logo贴彼,剛好也是一根以紅棕色為主的漸變色羽毛潜腻。于是,F(xiàn)link 的松鼠 Logo 就設(shè)計(jì)成了紅棕色器仗,而且擁有一個(gè)漂亮的漸變色尾巴融涣,尾巴的配色與 Apache 軟件基金會(huì)的 logo 一致。這只松鼠色彩炫目精钮,既呼應(yīng)了 Apache 的風(fēng)格威鹿,似乎也預(yù)示著 Flink 未來(lái)將要大放異彩。
1.2 Flink 的應(yīng)用
在 Flink 官網(wǎng)主頁(yè)的頂部可以看到轨香,項(xiàng)目的核心目標(biāo)忽你,是“數(shù)據(jù)流上的有狀態(tài)計(jì)算”(Stateful Computations over Data Streams)。
具體定位是:Apache Flink 是一個(gè)框架和分布式處理引擎臂容,用于對(duì)無(wú)界和有界數(shù)據(jù)流進(jìn)行有狀態(tài)計(jì)算科雳。Flink 被設(shè)計(jì)在所有常見(jiàn)的集群環(huán)境中運(yùn)行根蟹,以內(nèi)存執(zhí)行速度和任意規(guī)模來(lái)執(zhí)行計(jì)算。
Flink不僅僅可以在Yarn糟秘、Mesos简逮、Kubernetes上面運(yùn)行,同時(shí)也支持在裸機(jī)機(jī)器上運(yùn)行尿赚。在啟用高可用選項(xiàng)的情況下散庶,并不存在單點(diǎn)失效問(wèn)題。實(shí)踐證明凌净,在處理TB級(jí)別的數(shù)據(jù)時(shí)悲龟,F(xiàn)link仍然能保持高吞吐、低延遲的特性冰寻。
1.2.1 Flink 在企業(yè)中的應(yīng)用
Flink 為全球許多公司和企業(yè)的關(guān)鍵業(yè)務(wù)應(yīng)用提供了強(qiáng)大的支持躲舌。
對(duì)于數(shù)據(jù)處理而言,任何行業(yè)性雄、任何公司的需求其實(shí)都是一樣的:數(shù)據(jù)規(guī)模大没卸、實(shí)時(shí)性要求高、確保結(jié)果準(zhǔn)確秒旋、方便擴(kuò)展约计、故障后可恢復(fù)——而這些要求,作為新一代大數(shù)據(jù)流式處理引擎的 Flink 統(tǒng)統(tǒng)可以滿足迁筛!這也正是 Flink 在全世界范圍得到廣泛應(yīng)用的原因煤蚌。
1.2.2 Flink的應(yīng)用場(chǎng)景
Flink 可以為不同行業(yè)提供大數(shù)據(jù)實(shí)時(shí)處理的解決方案
二、傳統(tǒng)數(shù)據(jù)處理架構(gòu)
2.1 事務(wù)處理
2.2 倉(cāng)庫(kù)模式
將數(shù)據(jù)從業(yè)務(wù)數(shù)據(jù)庫(kù)同步到數(shù)據(jù)倉(cāng)庫(kù)细卧,再進(jìn)行數(shù)據(jù)分析和查詢尉桩。
三、流處理的演變
3.1 Lambda架構(gòu)
3.2 Kappa架構(gòu)
第一層DWD公共實(shí)時(shí)明細(xì)層
實(shí)時(shí)訂閱業(yè)務(wù)數(shù)據(jù)消息隊(duì)列贪庙,然后通過(guò)數(shù)據(jù)清洗蜘犁、多數(shù)據(jù)源join、流式數(shù)據(jù)與離線維度信息等的組合止邮,將一些相同粒度的業(yè)務(wù)系統(tǒng)这橙、維表中的維度屬性全部關(guān)聯(lián)到一起,增加數(shù)據(jù)易用性和復(fù)用性导披,得到最終的實(shí)時(shí)明細(xì)數(shù)據(jù)屈扎。這部分?jǐn)?shù)據(jù)有兩個(gè)分支,一部分直接落地到ADS撩匕,供實(shí)時(shí)明細(xì)查詢使用鹰晨,一部分再發(fā)送到消息隊(duì)列中,供下層計(jì)算使用。
第二層DWS公共實(shí)時(shí)匯總層
以數(shù)據(jù)主題+業(yè)務(wù)場(chǎng)景的方式創(chuàng)建公共匯總層模蜡,與離線數(shù)倉(cāng)不同的是漠趁,這里匯總層分為輕度匯總層和高度匯總層,并同時(shí)產(chǎn)出哩牍,輕度匯總層寫入ADS棚潦,用于前端產(chǎn)品復(fù)雜的OLAP查詢場(chǎng)景令漂,滿足自助分析和實(shí)時(shí)報(bào)表數(shù)據(jù)需求膝昆;高度匯總層寫入HBase,用于前端比較簡(jiǎn)單的KV查詢場(chǎng)景叠必,提升查詢性能荚孵,比如實(shí)時(shí)續(xù)班大屏等。
四纬朝、Flink的核心特性
- 高吞吐和低延遲:每秒處理數(shù)百萬(wàn)個(gè)事件收叶,毫秒級(jí)延遲。
- 結(jié)果的準(zhǔn)確性:Flink 提供了事件時(shí)間(event-time)和處理時(shí)間(processing-time)語(yǔ)義共苛。對(duì)于亂序事件流判没,事件時(shí)間語(yǔ)義仍然能提供一致且準(zhǔn)確的結(jié)果。
- 精確一次(exactly-once)的狀態(tài)一致性保證隅茎。
- 可以連接到最常用的存儲(chǔ)系統(tǒng)澄峰,如 Apache Kafka、Apache Cassandra辟犀、Elasticsearch俏竞、JDBC、Kinesis 和(分布式)文件系統(tǒng)堂竟,如 HDFS 和 S3魂毁。
- 高可用:本身高可用的設(shè)置,加上與 K8s出嘹,YARN 和 Mesos 的緊密集成席楚,再加上從故障中快速恢復(fù)和動(dòng)態(tài)擴(kuò)展任務(wù)的能力,F(xiàn)link 能做到以極少的停機(jī)時(shí)間 7×24 全天候運(yùn)行税稼。
- 能夠更新應(yīng)用程序代碼并將作業(yè)(jobs)遷移到不同的 Flink 集群酣胀,而不會(huì)丟失應(yīng)用程序的狀態(tài)。
4.1 分層 API
除了上述這些特性之外娶聘,F(xiàn)link 還是一個(gè)非常易于開(kāi)發(fā)的框架闻镶,因?yàn)樗鼡碛幸子谑褂玫姆謱?API,整體 API 分層如圖所示丸升。
最底層級(jí)的抽象僅僅提供了有狀態(tài)流铆农,它將處理函數(shù)( Process Function)嵌入到了DataStream API 中。底層處理函數(shù)(Process Function)與 DataStream API 相集成,可以對(duì)某些操作進(jìn)行抽象墩剖,它允許用戶可以使用自定義狀態(tài)處理來(lái)自一個(gè)或多個(gè)數(shù)據(jù)流的事件猴凹,且狀態(tài)具有一致性和容錯(cuò)保證。除此之外岭皂,用戶可以注冊(cè)事件時(shí)間并處理時(shí)間回調(diào)郊霎,從而使程序可以處理復(fù)雜的計(jì)算。
實(shí)際上爷绘,大多數(shù)應(yīng)用并不需要上述的底層抽象书劝,而是直接針對(duì)核心 API(Core APIs) 進(jìn)行編程,比如 DataStream API(用于處理有界或無(wú)界流數(shù)據(jù))以及 DataSet API(用于處理有界數(shù)據(jù)集)土至。這些 API 為數(shù)據(jù)處理提供了通用的構(gòu)建模塊购对,比如由用戶定義的多種形式的轉(zhuǎn)換(transformations)、連接(joins)陶因、聚合(aggregations)骡苞、窗口(windows)操作等。DataSet API為有界數(shù)據(jù)集提供了額外的支持楷扬,例如循環(huán)與迭代解幽。這些 API 處理的數(shù)據(jù)類型以類(classes) 的形式由各自的編程語(yǔ)言所表示。
Table API 是以表為中心的聲明式編程烘苹,其中表在表達(dá)流數(shù)據(jù)時(shí)會(huì)動(dòng)態(tài)變化躲株。Table API 遵循關(guān)系模型:表有二維數(shù)據(jù)結(jié)構(gòu)(schema)(類似于關(guān)系數(shù)據(jù)庫(kù)中的表),同時(shí) API 提供可比較的操作螟加,例如 select徘溢、join、group-by捆探、aggregate 等然爆。
盡管Table API 可以通過(guò)多種類型的用戶自定義函數(shù)(UDF)進(jìn)行擴(kuò)展,仍不如核心 API 更具表達(dá)能力黍图,但是使用起來(lái)代碼量更少曾雕,更加簡(jiǎn)潔。除此之外助被,Table API 程序在執(zhí)行之前會(huì)使用內(nèi)置優(yōu)化器進(jìn)行優(yōu)化剖张。
我們可以在表與 DataStream/DataSet 之間無(wú)縫切換, 以允許程序?qū)?Table API 與DataStream 以及 DataSet 混合使用揩环。
Flink 提供的最高層級(jí)的抽象是SQL搔弄。這一層抽象在語(yǔ)法與表達(dá)能力上與 Table API 類似, 但是是以 SQL 查詢表達(dá)式的形式表現(xiàn)程序丰滑。SQL 抽象與Table API 交互密切顾犹,同時(shí) SQL 查詢可以直接在 Table API 定義的表上執(zhí)行。
目前 Flink SQL 和Table API 還在開(kāi)發(fā)完善的過(guò)程中,很多大廠都會(huì)二次開(kāi)發(fā)符合自己需要的工具包炫刷。而 DataSet 作為批處理API 實(shí)際應(yīng)用較少擎宝,2020 年 12 月 8 日發(fā)布的新版本 1.12.0,已經(jīng)完全實(shí)現(xiàn)了真正的流批一體,DataSet API 已處于軟性棄用(soft deprecated)的狀態(tài)浑玛。用Data Stream API 寫好的一套代碼, 即可以處理流數(shù)據(jù), 也可以處理批數(shù)據(jù)绍申,只需要設(shè)置不同的執(zhí)行模式。這與之前版本處理有界流的方式是不一樣的顾彰,F(xiàn)link 已專門對(duì)批處理數(shù)據(jù)做了優(yōu)化處理极阅。
五、Flink應(yīng)用場(chǎng)景
Flink的功能強(qiáng)大拘央,它的主要特性包括:流批一體化涂屁、精確的狀態(tài)管理书在、事件時(shí)間支持以及精確的狀態(tài)一次性保證等灰伟。Flink不僅僅可以在Yarn、Mesos儒旬、Kubernetes上面運(yùn)行栏账,同時(shí)也支持在裸機(jī)機(jī)器上運(yùn)行。在啟用高可用選項(xiàng)的情況下栈源,并不存在單點(diǎn)失效問(wèn)題挡爵。實(shí)踐證明,在處理TB級(jí)別的數(shù)據(jù)時(shí)甚垦,F(xiàn)link仍然能保持高吞吐茶鹃、低延遲的特性。
5.1 事件驅(qū)動(dòng)型應(yīng)用
事件驅(qū)動(dòng)型應(yīng)用是一類具有狀態(tài)的應(yīng)用艰亮,從一個(gè)或者多個(gè)事件流中提取數(shù)據(jù)闭翩,并根據(jù)到來(lái)的事件觸發(fā)計(jì)算、更新?tīng)顟B(tài)或者進(jìn)行其他計(jì)算迄埃。事件驅(qū)動(dòng)型應(yīng)用是從計(jì)算存儲(chǔ)分離的傳統(tǒng)應(yīng)用基礎(chǔ)上演變而來(lái)的疗韵。在傳統(tǒng)的架構(gòu)中,需要通過(guò)讀寫事務(wù)型數(shù)據(jù)庫(kù)來(lái)完成侄非。
但是蕉汪,事件驅(qū)動(dòng)型應(yīng)用是基于狀態(tài)化流處理來(lái)完成;而且數(shù)據(jù)和計(jì)算不會(huì)分離逞怨,應(yīng)用只需要訪問(wèn)本地(內(nèi)存或磁盤)即可獲取數(shù)據(jù)者疤。通過(guò)定期持久化的寫入checkpoint來(lái)進(jìn)行系統(tǒng)容錯(cuò)。下圖描述了傳統(tǒng)應(yīng)用和事件驅(qū)動(dòng)型應(yīng)用架構(gòu)的區(qū)別叠赦。
5.2 事件驅(qū)動(dòng)型應(yīng)用的優(yōu)勢(shì)
- 事件驅(qū)動(dòng)型應(yīng)用通過(guò)本地?cái)?shù)據(jù)訪問(wèn)(無(wú)需查詢遠(yuǎn)程數(shù)據(jù)庫(kù))驹马,使得它具有更高的吞吐和更低的延遲。
- 因?yàn)橥ㄟ^(guò)異步、增量式地完成持久化存儲(chǔ)checkpoint窥翩,這就保證了checkpoint對(duì)事件處理的影響很微小业岁。
- 傳統(tǒng)應(yīng)用中,通常多個(gè)應(yīng)用會(huì)共享一個(gè)數(shù)據(jù)庫(kù)寇蚊,因此對(duì)數(shù)據(jù)庫(kù)的任何修改(調(diào)整IP笔时、用戶名/密碼、擴(kuò)容仗岸、升級(jí))都需要謹(jǐn)慎協(xié)調(diào)允耿。事件型應(yīng)用只需要考慮自身數(shù)據(jù),就不用考慮這些影響扒怖。
5.3 Flink如何支持事件驅(qū)動(dòng)型應(yīng)用
- Flink提供了一系列豐富的狀態(tài)操作原語(yǔ)较锡,能夠保證精確一次的一致性語(yǔ)義處理TB級(jí)別的有狀態(tài)數(shù)據(jù)。
- Flink還支持事件時(shí)間盗痒,可以自由地定制窗口邏輯蚂蕴。內(nèi)置的ProcessFunction支持細(xì)粒度的時(shí)間控制。
- Flink具有復(fù)雜事件處理(CEP)類庫(kù)俯邓,可以用來(lái)檢測(cè)數(shù)據(jù)流中的模式骡楼。
- Flink的突出特點(diǎn)是SavePoint。SavePoint是一個(gè)一致性的狀態(tài)映像稽鞭,可以做兼容應(yīng)用程序的起點(diǎn)鸟整。在完成一次SavePoint之后,即可進(jìn)行應(yīng)用的升級(jí)和擴(kuò)容朦蕴,還可以啟動(dòng)多個(gè)版本的應(yīng)用來(lái)完成A/B測(cè)試篮条。
5.4 事件驅(qū)動(dòng)型應(yīng)用的經(jīng)典案例
- 反欺詐
- 異常檢測(cè)
- 基于規(guī)則的報(bào)警
- 業(yè)務(wù)流程監(jiān)控
- (社交網(wǎng)絡(luò))Web應(yīng)用
5.5 數(shù)據(jù)分析應(yīng)用
- 數(shù)據(jù)分析主要是需要從原始數(shù)據(jù)中提取有價(jià)值的數(shù)據(jù)和維度。傳統(tǒng)的數(shù)據(jù)分析方式通常是利用批處理查詢吩抓。為了能得到最新的數(shù)據(jù)分析結(jié)果涉茧,必須把數(shù)據(jù)實(shí)時(shí)加入到數(shù)據(jù)集市,隨后將結(jié)果寫入OLAP實(shí)時(shí)數(shù)據(jù)倉(cāng)庫(kù)或者生成數(shù)據(jù)分析報(bào)告琴拧。
- 借助一些先進(jìn)的流式處理引擎降瞳,進(jìn)行實(shí)時(shí)數(shù)據(jù)分析。和傳統(tǒng)模式下讀取有限數(shù)據(jù)集不同的是蚓胸,流式查詢會(huì)接入實(shí)時(shí)流挣饥,并隨著事件消費(fèi)持續(xù)產(chǎn)生和更新結(jié)果。
如下圖所示沛膳,F(xiàn)link同時(shí)支持流式及批量分析應(yīng)用
5.5.1 流式分析應(yīng)用的優(yōu)勢(shì)
- 和批量分析相比扔枫,由于流式分析省掉了周期性的數(shù)據(jù)導(dǎo)入和查詢過(guò)程,因此流式數(shù)據(jù)分析的延遲更低锹安。
- 批量查詢必須處理那些有定期導(dǎo)入數(shù)據(jù)的邊界短荐,而流式處理不需要關(guān)注這個(gè)問(wèn)題倚舀。
- 批量數(shù)據(jù)分析必須由多個(gè)獨(dú)立組件組成,需要周期性地調(diào)度讀取數(shù)據(jù)和統(tǒng)計(jì)數(shù)據(jù)忍宋。如此復(fù)雜的流水線操作起來(lái)比較繁瑣痕貌,一旦某個(gè)組件出問(wèn)題將會(huì)影響流水線的下游步驟。而流式分析的應(yīng)用整體運(yùn)行在Flink系統(tǒng)之上糠排,涵蓋了從數(shù)據(jù)接入到后續(xù)結(jié)果計(jì)算的所有步驟舵稠,F(xiàn)link本身有故障恢復(fù)機(jī)制。
5.5.2 Flink如何支持?jǐn)?shù)據(jù)分析類應(yīng)用
Flink對(duì)流式數(shù)據(jù)分析和批量數(shù)據(jù)分析都提供了很好的支持入宦。它內(nèi)置了一個(gè)符合ANSI標(biāo)準(zhǔn)的SQL接口哺徊,能夠?qū)⒘鳌⑴樵兊恼Z(yǔ)義統(tǒng)一起來(lái)乾闰。同時(shí)落追,F(xiàn)link還支持豐富的用戶自定義函數(shù),能夠在SQL中執(zhí)行自定義函數(shù)涯肩。Flink的DataStream API和DataSet API能夠進(jìn)行更底層的控制轿钠。而且,F(xiàn)link的Gelly庫(kù)為基于批量數(shù)據(jù)集的大規(guī)模高性能圖分析提供了算法和構(gòu)建模塊支持宽菜。
5.5.3 數(shù)據(jù)分析應(yīng)用的經(jīng)典案例
- 電信網(wǎng)絡(luò)質(zhì)量監(jiān)控
- 移動(dòng)應(yīng)用中的產(chǎn)品更新和實(shí)驗(yàn)評(píng)估分析
- 消費(fèi)中心的實(shí)時(shí)數(shù)據(jù)即席分析
- 大規(guī)模圖分析
5.6 數(shù)據(jù)管道應(yīng)用
抽取-轉(zhuǎn)換-加載(ETL)是傳統(tǒng)數(shù)據(jù)倉(cāng)庫(kù)進(jìn)行數(shù)據(jù)轉(zhuǎn)換和遷移的常用方法谣膳。ETL通常會(huì)周期性的將數(shù)據(jù)從事務(wù)型數(shù)據(jù)庫(kù)或者原始日志同步到分析型數(shù)據(jù)倉(cāng)庫(kù)中竿报。
數(shù)據(jù)管道應(yīng)用和ETL作業(yè)的用途相似铅乡,都可以轉(zhuǎn)換、加工數(shù)據(jù)烈菌。并將其從某個(gè)存儲(chǔ)系統(tǒng)移動(dòng)到另一個(gè)阵幸。但數(shù)據(jù)管道是以持續(xù)流模式運(yùn)行,而非周期性出發(fā)芽世。數(shù)據(jù)管道支持從一個(gè)不斷生成數(shù)據(jù)的源頭讀取記錄挚赊,并且低延遲的將數(shù)據(jù)結(jié)果加載到終點(diǎn)。
下圖描述了周期性ETL作業(yè)和持續(xù)數(shù)據(jù)管道的差異济瓢。
5.6.1 數(shù)據(jù)管道的優(yōu)勢(shì)
和周期性ETL作業(yè)相比荠割,持續(xù)數(shù)據(jù)管道可以明顯降低數(shù)據(jù)移動(dòng)到目標(biāo)端的延遲。
5.6.2 Flink如何支持?jǐn)?shù)據(jù)管道應(yīng)用
很多常見(jiàn)的數(shù)據(jù)轉(zhuǎn)換和增強(qiáng)操作可以利用Flink的SQL接口(或者Table API)及用戶自定義函數(shù)解決旺矾。如果數(shù)據(jù)管道有更高級(jí)的需求蔑鹦,可以選擇更通用的DataStream API來(lái)實(shí)現(xiàn)。Flink為多種數(shù)據(jù)存儲(chǔ)系統(tǒng)(例如:Kafka箕宙、Kinesis嚎朽、Elasticsearch、JDBC數(shù)據(jù)庫(kù)系統(tǒng)等)內(nèi)置了連接器柬帕。它還具有用于文件系統(tǒng)的連續(xù)源哟忍,這些源監(jiān)視目錄和接收器以時(shí)間存儲(chǔ)方式寫入文件狡门。
5.6.3 數(shù)據(jù)管道應(yīng)用的經(jīng)典案例
- 電子商務(wù)中的實(shí)時(shí)數(shù)據(jù)查詢索引構(gòu)建
- 電子商務(wù)中的持續(xù)ETL
六、Flink vs SparkStreaming
6.1 流(Stream)和微批處理(micro-streaming)
6.2 數(shù)據(jù)模型
- Flink的基本數(shù)據(jù)模型是數(shù)據(jù)流和事件序列锅很。
- Spark采用的是RDD模型其馏,從本質(zhì)上說(shuō)SparkStreaming的DStream實(shí)際上是一組一組的小批量數(shù)據(jù)RDD集合。
6.3 運(yùn)行時(shí)架構(gòu)
- Flink是標(biāo)準(zhǔn)的流執(zhí)行模式爆安,一個(gè)事件在一個(gè)節(jié)點(diǎn)處理完之后尝偎,可以直接發(fā)往下一個(gè)節(jié)點(diǎn)進(jìn)行處理。
- SparkStreaming是微批計(jì)算鹏控,將DAG分成一個(gè)個(gè)不同的Stage致扯,一個(gè)完成之后才可以進(jìn)行下一個(gè)。
七当辐、處理無(wú)界和有界數(shù)據(jù)
任何數(shù)據(jù)都可以形成一種事件流抖僵。銀行卡(信用卡)交易、傳感器測(cè)量缘揪、機(jī)器日志耍群、網(wǎng)站或移動(dòng)應(yīng)用程序上的用戶交易記錄等等,所有這些數(shù)據(jù)都能形成一種流找筝。
數(shù)據(jù)可以被作為無(wú)界和有界流來(lái)處理蹈垢。
- 1、無(wú)界流:有定義流的開(kāi)始袖裕,但是沒(méi)有定義流的結(jié)束曹抬,會(huì)無(wú)休止地產(chǎn)生數(shù)據(jù)。處理無(wú)界數(shù)據(jù)通常要求以特定順序攝取事件急鳄,例如事件發(fā)生的順序谤民,以便能夠推斷結(jié)果的完整性。
- 2疾宏、有界流:有定義流的開(kāi)始张足,也有定義流的結(jié)束。有界流所有數(shù)據(jù)可以被排序坎藐,所以并不需要有序提取为牍。有界流通常被稱為批處理。
Flink擅長(zhǎng)處理無(wú)界和有界數(shù)據(jù)集 精確的時(shí)間控制和狀態(tài)化使得Flink的運(yùn)行時(shí)(runtime)能夠運(yùn)行任何處理無(wú)界流的應(yīng)用岩馍。有界流則由一些專為固定大小數(shù)據(jù)集特殊設(shè)計(jì)的算法和數(shù)據(jù)結(jié)構(gòu)進(jìn)行內(nèi)部處理碉咆。
八、部署
Flink是一個(gè)分布式系統(tǒng)兼雄,它需要計(jì)算資源來(lái)執(zhí)行應(yīng)用程序吟逝。Flink集成了所有常見(jiàn)的集群資源管理器,例如Hadoop Yarn赦肋、Apache Mesos和Kubernetes块攒,同時(shí)也可以作為獨(dú)立集群運(yùn)行励稳。
九、運(yùn)行任意規(guī)模的應(yīng)用
Flink通常把應(yīng)用程序并行化數(shù)千個(gè)任務(wù)囱井,這些任務(wù)分布在集群中并發(fā)執(zhí)行驹尼。因此應(yīng)用程序能夠充分利用無(wú)盡的CPU、內(nèi)存庞呕、磁盤和網(wǎng)絡(luò)IO新翎。Flink能夠很方便的對(duì)應(yīng)用程序的狀態(tài)進(jìn)行維護(hù)。其異步和增量的檢查點(diǎn)算法僅僅會(huì)對(duì)數(shù)據(jù)延遲產(chǎn)生極小的影響住练。而且能夠保證精確一次狀態(tài)的一致性地啰。
- 每天能處理數(shù)以萬(wàn)億的數(shù)據(jù)
- 應(yīng)用維護(hù)幾TB大小的狀態(tài)
- 應(yīng)用在數(shù)千個(gè)內(nèi)核上運(yùn)行
十、利用內(nèi)存進(jìn)行計(jì)算
有狀態(tài)的 Flink 程序針對(duì)本地狀態(tài)訪問(wèn)進(jìn)行了優(yōu)化讲逛。任務(wù)的狀態(tài)始終保留在內(nèi)存中亏吝,如果狀態(tài)大小超過(guò)可用內(nèi)存,則會(huì)保存在能高效訪問(wèn)的磁盤數(shù)據(jù)結(jié)構(gòu)中盏混。Flink 通過(guò)定期和異步地對(duì)本地狀態(tài)進(jìn)行持久化存儲(chǔ)來(lái)保證故障場(chǎng)景下精確一次的狀態(tài)一致性蔚鸥。
參考:
http://www.wjhsh.net/supertonny-p-11305118.html
https://blog.csdn.net/weixin_45417821/article/details/123990604
https://blog.csdn.net/m0_37125796/article/details/119722488
https://blog.csdn.net/weixin_42796403/article/details/114270648