Flink基礎(chǔ)教程(簡約筆記)

  • 人民郵電出版社

第一章 為何選擇Flink

  • 競品:SparkStreaming/Storm/Samza/Apex

  • Lambda架構(gòu)(不懂為何叫Lambda)
    https://ask.hellobi.com/blog/transwarp/5107

  • 在大型分布式系統(tǒng)各種认罩,數(shù)據(jù)一致性和對事件發(fā)生順序的理解必然都是有限的箱蝠。

  • 來源德語:快速、靈巧

  • Flink將批處理(有限的靜態(tài)數(shù)據(jù))視作一種特殊的流處理


    image.png
  • Flink Runtime是核心引擎垦垂,直接基于此的程序冗長編寫費力——提供API


    20190120113636940.png

第二章 流處理架構(gòu)

  • 傳統(tǒng)分布式的問題:
    1. 數(shù)據(jù)到達(dá)分析階段的流程復(fù)雜緩慢
    2. 都需要訪問數(shù)據(jù)庫宦搬,數(shù)據(jù)架構(gòu)單一
    3. 復(fù)雜的異常處理,難以保證異常出現(xiàn)后系統(tǒng)的正常運行
    4. 實際數(shù)據(jù)與狀態(tài)數(shù)據(jù)的一致性
image.png
  1. 消息傳輸層(Kafka或者M(jìn)apR Streams)
  • 從生產(chǎn)者采集連續(xù)事件產(chǎn)生的數(shù)據(jù)劫拗,并傳輸給訂閱了的app和服務(wù)
  1. 流處理層
  • 持續(xù)將數(shù)據(jù)在app和系統(tǒng)間移動

  • 聚合间校、處理事件

  • 在本地維持app的狀態(tài)

  • 兼具高性能和持久性(消息重播,而非到流處理層后就消失了)

  • 解耦生產(chǎn)者和消費者(消息立刻到達(dá)页慷,但無需立刻處理——支持多憔足、微服務(wù))

第三章 Flink用途

  1. 計算用戶連續(xù)訪問時長(解決了剛工作時遇到的一個痛點——用python腳本分析用戶在JZB_App上的訪問時長。當(dāng)時問題很多酒繁,除了數(shù)據(jù)處理的緩慢滓彰,內(nèi)存消耗,如何定義連續(xù)訪問都很麻煩欲逃,沒法確定哪種是最好的找蜜,否則就要每個定義都計算一份數(shù)據(jù))
  • 如果使用微批處理饼暑,可能人工定義的計算窗口與會話窗口不吻合
  • Flink可以設(shè)置非活動閾值——可以根據(jù)真實情況設(shè)置計算窗口
  1. Flink優(yōu)勢——能夠區(qū)分這兩類時間
  • 事件事件——實際發(fā)生時間(容易實現(xiàn)計算的正確性)
  • 處理時間——開始被程序處理
  1. 故障后保持準(zhǔn)確
  • 檢查點checkpoint機(jī)制

第四章 對時間的處理

批處理

定期運行批處理作業(yè)稳析,實現(xiàn)應(yīng)用持續(xù)性洗做。數(shù)據(jù)被持續(xù)地分割為文件(比如每小時一單位),作業(yè)以文件作為輸入
  • 缺點
    1. 太多獨立部分(太多系統(tǒng)——數(shù)據(jù)分割攝取彰居、計算诚纸、調(diào)度 依賴混淆,都要需要時間概念陈惰;學(xué)習(xí)成本和bug)
    2. 時間處理方法不明確(比如改為半小時一次)
    3. 預(yù)警(需要通過增加Storm實時提供近似計數(shù)畦徘,這樣就變成Lambda了)
    4. 亂序事件流(到達(dá)數(shù)據(jù)中心的順序和實際發(fā)生順序)
    5. 批處理作業(yè)時間界限不清洗(分割點前后的時間,以及要分析時間段聚合結(jié)果無法滿足)

流處理

柱狀為kafka.png
  • 流即是流不必人為分割
  • 時間定義被寫入應(yīng)用程序代碼(時間窗口等)抬闯,而非牽扯到多個模塊

流處理中的批處理

  • 批處理只作為提高系統(tǒng)性能的機(jī)制井辆。批量越大,系統(tǒng)吞吐量越大
  • 為提高性能使用的批處理必須完全獨立于定義窗口時用的緩沖溶握,或者為了保證容錯性而提交的代碼杯缺,也不能作為API的一部分。否則系統(tǒng)將受到限制睡榆,難以使用且脆弱萍肆。
    (有點不好理解)

時間

  • 事件時間,帶有時間戳的記錄
  • 處理時間胀屿,處理事件的機(jī)器測量的時間
  • 攝取時間/進(jìn)入時間塘揣,進(jìn)入流處理框架的時間

時間窗口

支持滾動和滑動


滾動.png
stream.timeWindow(Time.minutes(1))
滑動.png
stream.timeWindow(Time.minutes(1), Time.seconds(30))

計數(shù)窗口

采用計數(shù)窗口時,分組依據(jù)不再是時間戳宿崭,而是元素的數(shù)量亲铡。滾動和滑動的計數(shù)窗口分別定義如下。

stream.countWindow(4)
stream.countWindow(4, 2)

假設(shè)計數(shù)窗口定義的元素數(shù)量為 100劳曹,而某個 key 對應(yīng)的元素永遠(yuǎn)達(dá)不到 100 個奴愉,那么窗口就永遠(yuǎn)不會關(guān)閉,被該窗口占用的內(nèi)存也就浪費了铁孵。

會話窗口

可方便處理用戶連續(xù)訪問頁面時長的問題(通過設(shè)定間隔時長)锭硼。

stream.window(SessionWindows.withGap(Time.minutes(5))

時空穿梭

image.png

很有用:調(diào)試或者重新處理數(shù)據(jù)。但需要流處理器支持事件時間蜕劝,否則結(jié)果會不同(機(jī)器時間不同了)

水印

當(dāng)計算基于事件時間時檀头,如何判斷所有的事件已到達(dá)?需要依靠由數(shù)據(jù)驅(qū)動的時鐘而非系統(tǒng)時鐘岖沛。
比如滾動窗口中暑始,計算10:00:00-10:01:00的事件,因為時間戳就是數(shù)據(jù)婴削,那如何判斷是否存在某個10:00:59的元素還沒到呢廊镜?

Flink 通過水印來推進(jìn)事件時間。水印是嵌在流中的常規(guī)記錄唉俗,計算程序通過水印獲知某個時間點已到嗤朴。水印使事件時間與處理時間完全無關(guān)配椭。

水印由應(yīng)用程序開發(fā)人員生成,需要領(lǐng)域知識雹姊。啟發(fā)式水印可能出錯股缸。

第五章 有狀態(tài)的計算

image.png

一致性

流處理一致性三個級別(對于故障發(fā)生后的恢復(fù)能力):

  • at-most-once: 計數(shù)結(jié)果可能丟失,沒有能力
  • at-least-once: 計數(shù)結(jié)果>=正確值(Storm/Samza)
  • exactly-once: 計數(shù)結(jié)果=正確值 (Strorm Trident/ Spark Streaming)
    Flink——既保證exactly吱雏,也有低延遲高吞吐

檢查點

  • 保證exactly-once的機(jī)制敦姻,在出現(xiàn)故障時將系統(tǒng)重置回正確狀態(tài)。
    總體而言就是在數(shù)據(jù)流中嵌入檢查點歧杏,遇到檢查點時記錄檢查點的位置與此時的計數(shù)狀態(tài)镰惦,以方便在遇到故障時恢復(fù)最近的狀態(tài)并重跑檢查點后的數(shù)據(jù)。
    詳情可見(也是部分圖源):
    http://www.linkedkeeper.com/1415.html
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末犬绒,一起剝皮案震驚了整個濱河市陨献,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌懂更,老刑警劉巖眨业,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異沮协,居然都是意外死亡龄捡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門慷暂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來聘殖,“玉大人,你說我怎么就攤上這事行瑞〖橄伲” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵血久,是天一觀的道長突照。 經(jīng)常有香客問我,道長氧吐,這世上最難降的妖魔是什么讹蘑? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮筑舅,結(jié)果婚禮上座慰,老公的妹妹穿的比我還像新娘。我一直安慰自己翠拣,他們只是感情好版仔,可當(dāng)我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般蛮粮。 火紅的嫁衣襯著肌膚如雪背桐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天蝉揍,我揣著相機(jī)與錄音,去河邊找鬼畦娄。 笑死又沾,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的熙卡。 我是一名探鬼主播杖刷,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼驳癌!你這毒婦竟也來了滑燃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤颓鲜,失蹤者是張志新(化名)和其女友劉穎表窘,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甜滨,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡乐严,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了衣摩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昂验。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖艾扮,靈堂內(nèi)的尸體忽然破棺而出既琴,到底是詐尸還是另有隱情,我是刑警寧澤泡嘴,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布甫恩,位于F島的核電站,受9級特大地震影響酌予,放射性物質(zhì)發(fā)生泄漏填物。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一霎终、第九天 我趴在偏房一處隱蔽的房頂上張望滞磺。 院中可真熱鬧,春花似錦莱褒、人聲如沸击困。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阅茶。三九已至蛛枚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間脸哀,已是汗流浹背蹦浦。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留撞蜂,地道東北人盲镶。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像蝌诡,于是被迫代替她去往敵國和親溉贿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,509評論 2 348

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

  • 了解Flink是什么浦旱,F(xiàn)link應(yīng)用程序運行的多樣化宇色,對比業(yè)界常用的流處理框架,F(xiàn)link的發(fā)展趨勢颁湖,F(xiàn)link生...
    JavaEdge閱讀 5,066評論 1 18
  • Window是無限數(shù)據(jù)流處理的核心宣蠕,Window將一個無限的stream拆分成有限大小的”buckets”桶,我們...
    尼小摩閱讀 3,441評論 0 13
  • 簡介 大數(shù)據(jù)是收集甥捺、整理植影、處理大容量數(shù)據(jù)集,并從中獲得見解所需的非傳統(tǒng)戰(zhàn)略和技術(shù)的總稱涎永。雖然處理數(shù)據(jù)所需的計算能力...
    x_no_one閱讀 1,926評論 0 3
  • 你遭遇過哪些不信任 001.以前讀書的時候羡微,某些同學(xué)沒交作業(yè)谷饿,上課時老師的訓(xùn)話:沒帶就是沒寫!生病是裝的吧妈倔?晚上就...
    change_wjh閱讀 332評論 4 3