成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Flink狀態(tài)管理和容錯機制介紹

作者: 施曉罡

我們提供的服務有:成都做網(wǎng)站、網(wǎng)站設計、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、九原ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的九原網(wǎng)站制作公司

本文來自2018年8月11日在北京舉行的 Flink Meetup會議,分享來自于施曉罡,目前在阿里大數(shù)據(jù)團隊部從事Blink方面的研發(fā),現(xiàn)在主要負責Blink狀態(tài)管理和容錯相關技術的研發(fā)。

本文主要內(nèi)容如下:

  • 有狀態(tài)的流數(shù)據(jù)處理;

  • Flink中的狀態(tài)接口;

  • 狀態(tài)管理和容錯機制實現(xiàn);

  • 阿里相關工作介紹;

一.有狀態(tài)的流數(shù)據(jù)處理

1.1什么是有狀態(tài)的計算

計算任務的結果不僅僅依賴于輸入,還依賴于它的當前狀態(tài),其實大多數(shù)的計算都是有狀態(tài)的計算。 比如wordcount,給一些word,其計算它的count,這是一個很常見的業(yè)務場景。count做為輸出,在計算的過程中要不斷的把輸入累加到count上去,那么count就是一個state。

1.2.傳統(tǒng)的流計算系統(tǒng)缺少對于程序狀態(tài)的有效支持
  • 狀態(tài)數(shù)據(jù)的存儲和訪問;

  • 狀態(tài)數(shù)據(jù)的備份和恢復;

  • 狀態(tài)數(shù)據(jù)的劃分和動態(tài)擴容;

Flink狀態(tài)管理和容錯機制介紹cdn.xitu.io/2019/4/25/16a532cb9435dfda?w=1171&h=609&f=png&s=95901">
在傳統(tǒng)的批處理中,數(shù)據(jù)是劃分為塊分片去完成的,然后每一個Task去處理一個分片。當分片執(zhí)行完成后,把輸出聚合起來就是最終的結果。在這個過程當中,對于state的需求還是比較小的。

對于流計算而言,對State有非常高的要求,因為在流系統(tǒng)中輸入是一個無限制的流,會運行很長一段時間,甚至運行幾天或者幾個月都不會停機。在這個過程當中,就需要將狀態(tài)數(shù)據(jù)很好的管理起來。很不幸的是,在傳統(tǒng)的流計算系統(tǒng)中,對狀態(tài)管理支持并不是很完善。比如storm,沒有任何程序狀態(tài)的支持,一種可選的方案是storm+hbase這樣的方式去實現(xiàn),把這狀態(tài)數(shù)據(jù)存放在Hbase中,計算的時候再次從Hbase讀取狀態(tài)數(shù)據(jù),做更新在寫入進去。這樣就會有如下幾個問題

  • 流計算系統(tǒng)的任務和Hbase的數(shù)據(jù)存儲有可能不在同一臺機器上,導致性能會很差。這樣經(jīng)常會做遠端的訪問,走網(wǎng)絡和存儲;

  • 備份和恢復是比較困難,因為Hbase是沒有回滾的,要做到Exactly onces很困難。在分布式環(huán)境下,如果程序出現(xiàn)故障,只能重啟Storm,那么Hbase的數(shù)據(jù)也就無法回滾到之前的狀態(tài)。比如廣告計費的這種場景,Storm+Hbase是是行不通的,出現(xiàn)的問題是錢可能就會多算,解決以上的辦法是Storm+MySQL,通過mysql的回滾解決一致性的問題。但是架構會變得非常復雜。性能也會很差,要commit確保數(shù)據(jù)的一致性。

  • 對于storm而言狀態(tài)數(shù)據(jù)的劃分和動態(tài)擴容也是非常難做,一個很嚴重的問題是所有用戶都會在strom上重復的做這些工作,比如搜索,廣告都要在做一遍,由此限制了部門的業(yè)務發(fā)展。
1.3.Flink豐富的狀態(tài)訪問和高效的容錯機制

Flink在最早設計的時候就意識到了這個問題,并提供了豐富的狀態(tài)訪問和容錯機制。如下圖所示:

Flink狀態(tài)管理和容錯機制介紹

二.Flink中的狀態(tài)管理

2.1.按照數(shù)據(jù)的劃分和擴張方式,F(xiàn)link中大致分為2類:
  • Keyed States

  • Operator States

Flink狀態(tài)管理和容錯機制介紹

2.1.1.Keyed States

Keyed States的使用

Flink狀態(tài)管理和容錯機制介紹

Flink也提供了Keyed States多種數(shù)據(jù)結構類型

Flink狀態(tài)管理和容錯機制介紹

Keyed States的動態(tài)擴容

Flink狀態(tài)管理和容錯機制介紹

2.1.2.Operator State

Operator States的使用

Flink狀態(tài)管理和容錯機制介紹

Operator States的數(shù)據(jù)結構不像Keyed States豐富,現(xiàn)在只支持List

Operator States多種擴展方式

Flink狀態(tài)管理和容錯機制介紹

Operator States的動態(tài)擴展是非常靈活的,現(xiàn)提供了3種擴展,下面分別介紹:

  • ListState:并發(fā)度在改變的時候,會將并發(fā)上的每個List都取出,然后把這些List合并到一個新的List,然后根據(jù)元素的個數(shù)在均勻分配給新的Task;

  • UnionListState:相比于ListState更加靈活,把劃分的方式交給用戶去做,當改變并發(fā)的時候,會將原來的List拼接起來。然后不做劃分,直接交給用戶;

  • BroadcastState:如大表和小表做Join時,小表可以直接廣播給大表的分區(qū),在每個并發(fā)上的數(shù)據(jù)都是完全一致的。做的更新也相同,當改變并發(fā)的時候,把這些數(shù)據(jù)COPY到新的Task即可

以上是Flink Operator States提供的3種擴展方式,用戶可以根據(jù)自己的需求做選擇。

使用Checkpoint提高程序的可靠性

用戶可以根據(jù)的程序里面的配置將checkpoint打開,給定一個時間間隔后,框架會按照時間間隔給程序的狀態(tài)進行備份。當發(fā)生故障時,F(xiàn)link會將所有Task的狀態(tài)一起恢復到Checkpoint的狀態(tài)。從哪個位置開始重新執(zhí)行。

Flink也提供了多種正確性的保障,包括:

  • AT LEAST ONCE;

  • Exactly once;

    Flink狀態(tài)管理和容錯機制介紹

備份為保存在State中的程序狀態(tài)數(shù)據(jù)

Flink也提供了一套機制,允許把這些狀態(tài)放到內(nèi)存當中。做Checkpoint的時候,由Flink去完成恢復。

Flink狀態(tài)管理和容錯機制介紹

從已停止作業(yè)的運行狀態(tài)中恢復

當組件升級的時候,需要停止當前作業(yè)。這個時候需要從之前停止的作業(yè)當中恢復,F(xiàn)link提供了2種機制恢復作業(yè):

  • Savepoint:是一種特殊的checkpoint,只不過不像checkpoint定期的從系統(tǒng)中去觸發(fā)的,它是用戶通過命令觸發(fā),存儲格式和checkpoint也是不相同的,會將數(shù)據(jù)按照一個標準的格式存儲,不管配置什么樣,F(xiàn)link都會從這個checkpoint恢復,是用來做版本升級一個非常好的工具;

  • External Checkpoint:對已有checkpoint的一種擴展,就是說做完一次內(nèi)部的一次Checkpoint后,還會在用戶給定的一個目錄中,多存儲一份checkpoint的數(shù)據(jù);

Flink狀態(tài)管理和容錯機制介紹

三.狀態(tài)管理和容錯機制實現(xiàn)

下面介紹一下狀態(tài)管理和容錯機制實現(xiàn)方式,F(xiàn)link提供了3種不同的StateBackend

  • MemoryStateBackend

  • FsStateBackend

  • RockDBStateBackend

    Flink狀態(tài)管理和容錯機制介紹

用戶可以根據(jù)自己的需求選擇,如果數(shù)據(jù)量較小,可以存放到MemoryStateBackend和FsStateBackend中,如果數(shù)據(jù)量較大,可以放到RockDB中。

下面介紹HeapKeyedStateBackend和RockDBKeyedStateBackend

第一,HeapKeyedStateBackend

Flink狀態(tài)管理和容錯機制介紹

第二,RockDBKeyedStateBackend

Flink狀態(tài)管理和容錯機制介紹

Checkpoint的執(zhí)行流程

Checkpoint的執(zhí)行流程是按照Chandy-Lamport算法實現(xiàn)的。

Flink狀態(tài)管理和容錯機制介紹

Checkpoint Barrier的對齊

Flink狀態(tài)管理和容錯機制介紹

全量Checkpoint

全量Checkpoint會在每個節(jié)點做備份數(shù)據(jù)時,只需要將數(shù)據(jù)都便利一遍,然后寫到外部存儲中,這種情況會影響備份性能。在此基礎上做了優(yōu)化。

Flink狀態(tài)管理和容錯機制介紹

RockDB的增量Checkpoint

RockDB的數(shù)據(jù)會更新到內(nèi)存,當內(nèi)存滿時,會寫入到磁盤中。增量的機制會將新產(chǎn)生的文件COPY持久化中,而之前產(chǎn)生的文件就不需要COPY到持久化中去了。通過這種方式減少COPY的數(shù)據(jù)量,并提高性能。

Flink狀態(tài)管理和容錯機制介紹

四.阿里相關工作介紹

4.1.Flink在阿里的成長路線

阿里是從2015年開始調(diào)研Flink,2015年10月啟動Blink項目,并完善Flink在大規(guī)模生產(chǎn)下的一些優(yōu)化和改進。2016年雙11采用了Blink系統(tǒng),為搜索,推薦,廣告業(yè)務提供服務。2017年5月Blink已成為阿里的實時計算引擎。

Flink狀態(tài)管理和容錯機制介紹

4.2.阿里在狀態(tài)管理和容錯相關的工作

Flink狀態(tài)管理和容錯機制介紹

正在做的工作,基于State重構Window方面的一些優(yōu)化,阿里也正在將功能做完善。后續(xù)將包括asynchronous Checkpoint的功能完善,并和社區(qū)進一步溝通和合作。幫助Flink社區(qū)完善相關方面的工作。

更多資訊請訪問 Apache Flink 中文社區(qū)網(wǎng)站

網(wǎng)頁名稱:Flink狀態(tài)管理和容錯機制介紹
網(wǎng)站網(wǎng)址:http://jinyejixie.com/article32/ggiisc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、企業(yè)建站、虛擬主機、品牌網(wǎng)站建設、靜態(tài)網(wǎng)站、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
永济市| 瑞丽市| 疏附县| 资溪县| 察隅县| 合水县| 叙永县| 台山市| 安陆市| 呈贡县| 宁强县| 云梦县| 锡林郭勒盟| 福安市| 定襄县| 霍城县| 湖州市| 汉中市| 凤阳县| 通城县| 高碑店市| 临武县| 峡江县| 沙湾县| 滕州市| 高清| 漾濞| 大兴区| 漳浦县| 兴业县| 新郑市| 蒙山县| 长岛县| 滦平县| 阿荣旗| 洛扎县| 海阳市| 城步| 江川县| 珠海市| 饶河县|