Flink文檔 - 數(shù)據(jù)流編程模型

抽象層級(jí)

Flink提供了幾個(gè)不同的抽象層級(jí)來(lái)開(kāi)發(fā)流處理/批處理應(yīng)用程序粹庞。


  • 最底層抽象簡(jiǎn)單的提供了狀態(tài)流處理。該功能主要封裝在DataStream API中的Process函數(shù)中蕾域。用戶可以使用這些函數(shù)處理多個(gè)流中的事件,以及使用一致性容錯(cuò)狀態(tài)到旦。此外旨巷,用戶也可以注冊(cè)事件時(shí)間并處理時(shí)間回調(diào),允許程序?qū)崿F(xiàn)復(fù)雜的計(jì)算添忘。
  • 通常采呐,用戶不需要直接使用上面的底層抽象,直接使用核心API(例如DataStream API和DataSet API)即可搁骑。這些API提供了數(shù)據(jù)處理的通用模塊斧吐,比如轉(zhuǎn)換,連接仲器,聚合煤率,開(kāi)窗,狀態(tài)等操作乏冀。這些API中的數(shù)據(jù)類型使用對(duì)應(yīng)語(yǔ)言的類表示蝶糯。DataStream API中的Process函數(shù)可以使用底層抽象。DataSet API為綁定數(shù)據(jù)集提供了更多原語(yǔ)辆沦。
  • Table API是一個(gè)以為中心的聲明式DSL昼捍,支持動(dòng)態(tài)修改。Table API遵循關(guān)系模型:每個(gè)表都有一個(gè)schema,API提供諸如select,project妻率,join,group-by乍钻,aggregate等操作。Table API很容易擴(kuò)展铭腕,對(duì)用戶來(lái)說(shuō)也很簡(jiǎn)潔银择。此外,Table API代碼在執(zhí)行前還會(huì)進(jìn)行優(yōu)化谨履。
  • 最高層抽象是SQL欢摄。這層抽象在語(yǔ)義和表達(dá)上與Table API一樣熬丧,不過(guò)是將代碼表述成SQL查詢笋粟。

程序和數(shù)據(jù)流

Flink程序最基本的構(gòu)建單元是streamtransformation怀挠。從概念上講,stream是一個(gè)數(shù)據(jù)記錄的流害捕,而transformation是一個(gè)以一個(gè)或多個(gè)stream作為輸入绿淋,產(chǎn)生一個(gè)或多個(gè)stream的操作。

執(zhí)行時(shí)尝盼,F(xiàn)link程序會(huì)映射成流式數(shù)據(jù)流吞滞,它由操作組成。每個(gè)數(shù)據(jù)流以一個(gè)或多個(gè)source開(kāi)始盾沫,以一個(gè)或多個(gè)sink結(jié)束裁赠。數(shù)據(jù)流類似于任意有向非循環(huán)圖(DAG)。

通常赴精,程序中的transformation操作和數(shù)據(jù)流中的操作是一對(duì)一關(guān)系佩捞,但有時(shí)一個(gè)transformation也可能對(duì)應(yīng)多個(gè)操作。

并行數(shù)據(jù)流

Flink程序天生就是并行和分布式的蕾哟。執(zhí)行期間一忱,一個(gè)會(huì)分成幾個(gè)流分區(qū),每個(gè)操作也分成多個(gè)操作子任務(wù)谭确。子任務(wù)彼此之間是獨(dú)立的帘营,運(yùn)行在不同的線程,甚至是不同的機(jī)器和容器之中逐哈。

子任務(wù)的數(shù)量就是該操作的并行度芬迄。流的并行度等同于操作的并行度。不同操作可能有不同的并行層級(jí)鞠眉。


流可以以一對(duì)一(或轉(zhuǎn)發(fā))模式薯鼠,或者重分發(fā)模式在兩個(gè)操作之間傳輸數(shù)據(jù)。

  • 一對(duì)一流(例如上圖中的sourcemap() 之間)保留元素的分區(qū)和順序械蹋。這意味著map()操作的subtask[1]看到的元素與source操作的subtask[1]生成的元素一模一樣出皇。
  • 重分發(fā)流(例如上圖中的map()KeyBy/Window之間)改變了流的分區(qū)。根據(jù)所選的操作哗戈,每個(gè)子任務(wù)將數(shù)據(jù)發(fā)送到不同的目標(biāo)子任務(wù)郊艘。

窗口

聚合事件在流處理和批處理系統(tǒng)上的工作方式是不同的。例如唯咬,統(tǒng)計(jì)流中的元素個(gè)數(shù)是不可能的纱注,因?yàn)榱魍ǔJ菬o(wú)限的(未綁定)。一般來(lái)說(shuō)胆胰,流上的聚合使用的是開(kāi)窗函數(shù)狞贱,諸如“統(tǒng)計(jì)最后5分鐘”,或者“求最后100個(gè)元素的和”蜀涨。

開(kāi)窗函數(shù)可以是時(shí)間驅(qū)動(dòng)的瞎嬉,也可以是數(shù)據(jù)驅(qū)動(dòng)的蝎毡。窗口通常分為以下幾種:翻滾窗口(沒(méi)有重疊),滑動(dòng)窗口(有重疊)氧枣,會(huì)話窗口沐兵。

時(shí)間

在流處理程序中提到時(shí)間,通常說(shuō)的是以下幾種:

  • 事件時(shí)間便监,即事件創(chuàng)建的時(shí)間扎谎。通常使用時(shí)間戳表示
  • 提取時(shí)間指事件進(jìn)入數(shù)據(jù)流的時(shí)間
  • 處理時(shí)間指執(zhí)行操作的時(shí)間

狀態(tài)操作

數(shù)據(jù)流中絕大多數(shù)操作每次只查看一個(gè)事件(例如事件解析器),但是某些操作會(huì)記錄多個(gè)事件的信息(例如開(kāi)窗函數(shù))烧董。這些操作都是有狀態(tài)的毁靶。

狀態(tài)操作的狀態(tài)使用一個(gè)K-V結(jié)構(gòu)維護(hù)。狀態(tài)會(huì)分區(qū)逊移,并嚴(yán)格地隨著狀態(tài)操作一起分發(fā)老充。因此,只有使用了keyBy()函數(shù)的stream才能夠訪問(wèn)K-V結(jié)構(gòu)的狀態(tài)螟左,并且僅限于當(dāng)前操作相關(guān)聯(lián)的值啡浊。對(duì)齊流和狀態(tài)的key可以確保所有狀態(tài)更新都是本地操作,從而確保一致性而不需要額外的事務(wù)開(kāi)銷胶背。此外還可以重新分布狀態(tài)以及流分區(qū)巷嚣。

檢查點(diǎn)容錯(cuò)

Flink將stream replaycheckpointing結(jié)合起來(lái)實(shí)現(xiàn)容錯(cuò)。檢查點(diǎn)與每個(gè)輸入流和操作的狀態(tài)相關(guān)钳吟。通過(guò)回復(fù)操作的狀態(tài)和檢查點(diǎn)事件重放廷粒,F(xiàn)link可以從檢查點(diǎn)回復(fù)數(shù)據(jù)里,同時(shí)保證一致性红且。

檢查點(diǎn)區(qū)間是在執(zhí)行期間用恢復(fù)時(shí)間(需要重放的事件的數(shù)量)來(lái)折衷容錯(cuò)開(kāi)銷的手段坝茎。

批處理流數(shù)據(jù)

Flink將批處理程序視為一種特殊的流處理程序。此時(shí)流是綁定的(元素?cái)?shù)量有限)暇番。這是數(shù)據(jù)使用DataSet表示嗤放,這樣處理批數(shù)據(jù)的方式與流數(shù)據(jù)的方式相同,除了以下幾點(diǎn):

  • 批處理容錯(cuò)不使用檢查點(diǎn)壁酬。數(shù)據(jù)恢復(fù)會(huì)重放整個(gè)流次酌。
  • 狀態(tài)操作使用內(nèi)存/核外數(shù)據(jù)結(jié)構(gòu)。
  • DataSet API使用同步迭代舆乔。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末岳服,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子希俩,更是在濱河造成了極大的恐慌吊宋,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颜武,死亡現(xiàn)場(chǎng)離奇詭異璃搜,居然都是意外死亡文兑,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門腺劣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人因块,你說(shuō)我怎么就攤上這事橘原。” “怎么了涡上?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵趾断,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我吩愧,道長(zhǎng)芋酌,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任雁佳,我火速辦了婚禮脐帝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘糖权。我一直安慰自己堵腹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布星澳。 她就那樣靜靜地躺著疚顷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪禁偎。 梳的紋絲不亂的頭發(fā)上腿堤,一...
    開(kāi)封第一講書(shū)人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音如暖,去河邊找鬼笆檀。 笑死,一個(gè)胖子當(dāng)著我的面吹牛盒至,可吹牛的內(nèi)容都是我干的误债。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼妄迁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼寝蹈!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起登淘,我...
    開(kāi)封第一講書(shū)人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤箫老,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后黔州,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體耍鬓,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阔籽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了牲蜀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笆制。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖涣达,靈堂內(nèi)的尸體忽然破棺而出在辆,到底是詐尸還是另有隱情,我是刑警寧澤度苔,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布匆篓,位于F島的核電站,受9級(jí)特大地震影響寇窑,放射性物質(zhì)發(fā)生泄漏鸦概。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一甩骏、第九天 我趴在偏房一處隱蔽的房頂上張望窗市。 院中可真熱鬧,春花似錦饮笛、人聲如沸谨设。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)扎拣。三九已至,卻和暖如春素跺,著一層夾襖步出監(jiān)牢的瞬間二蓝,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工指厌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留刊愚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓踩验,卻偏偏與公主長(zhǎng)得像鸥诽,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子箕憾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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