Apache Flink 簡(jiǎn)介

前言

計(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è)開源大數(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),極大地改善了以前的流式處理框架所存在的問題。

目前,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)銜開發(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ù)引擎開始在開源大數(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 的幾位核心開發(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í)開始關(guān)注、并參與到 Flink 社區(qū)建設(shè)的。
  • 2019 年 1 月,長(zhǎng)期對(duì) Flink 投入研發(fā)的阿里巴巴,以 9000 萬(wàn)歐元的價(jià)格收購(gòu)了 Data
    Artisans 公司;之后又將自己的內(nèi)部版本 Blink 開源,繼而與 8 月份發(fā)布的 Flink 1.9.0
    版本進(jìn)行了合并。自此之后,F(xiàn)link 被越來(lái)越多的人所熟知,成為當(dāng)前最火的新一代
    大數(shù)據(jù)處理框架。

地址

Logo

flink 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?,顏色是迷人的紅棕色;而 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ì)在所有常見的集群環(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)失效問題。實(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è)非常易于開發(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 還在開發(fā)完善的過(guò)程中,很多大廠都會(huì)二次開發(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)失效問題。實(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à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)用只需要訪問本地(內(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ú)需查詢遠(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è)問題。
  • 批量數(shù)據(jù)分析必須由多個(gè)獨(dú)立組件組成,需要周期性地調(diào)度讀取數(shù)據(jù)和統(tǒng)計(jì)數(shù)據(jù)。如此復(fù)雜的流水線操作起來(lái)比較繁瑣,一旦某個(gè)組件出問題將會(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ū)⒘?、批查詢的語(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)用

很多常見的數(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ú)界流:有定義流的開始,但是沒有定義流的結(jié)束,會(huì)無(wú)休止地產(chǎn)生數(shù)據(jù)。處理無(wú)界數(shù)據(jù)通常要求以特定順序攝取事件,例如事件發(fā)生的順序,以便能夠推斷結(jié)果的完整性。
  • 2、有界流:有定義流的開始,也有定義流的結(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集成了所有常見的集群資源管理器,例如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)訪問進(jìn)行了優(yōu)化。任務(wù)的狀態(tài)始終保留在內(nèi)存中,如果狀態(tài)大小超過(guò)可用內(nèi)存,則會(huì)保存在能高效訪問的磁盤數(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容