State Backends

原文鏈接


使用Data Stream API編寫的程序通常以不同的形式持有狀態(tài):

  • 在窗口中收集或聚合元素陈辱,直到觸發(fā)狀態(tài)存儲(chǔ)
  • 轉(zhuǎn)換函數(shù)可能使用key/value狀態(tài)接口來存儲(chǔ)元素
  • 轉(zhuǎn)換函數(shù)可能實(shí)現(xiàn)CheckpointedFunction接口來使得它們的本地變量容錯(cuò)赌渣。

參見流API指南中的狀態(tài)部分

當(dāng)checkpoint被激活時(shí),狀態(tài)會(huì)被持久化到checkpoint却特,以防止數(shù)據(jù)丟失和無縫恢復(fù)尖飞。狀態(tài)在內(nèi)部如何組織和它們?nèi)绾我约霸谀某志没=模蕾囉谒x的狀態(tài)后端

可選的狀態(tài)后端

Flink內(nèi)部提供了這些狀態(tài)后端:

  • MemoryStateBackend
  • FsStateBackend
  • RocksDBStateBackend

如果沒有其他配置涣脚,系統(tǒng)將使用MemoryStateBackend示辈。

MemoryStateBackend

MemoryStateBackend將內(nèi)部的數(shù)據(jù)保存在Java堆上。 Key/value狀態(tài)和窗口操作符持有存儲(chǔ)值遣蚀,觸發(fā)器等的哈希表矾麻。
當(dāng)進(jìn)行checkpoint時(shí)纱耻,這個(gè)狀態(tài)后端會(huì)對(duì)當(dāng)前的狀態(tài)進(jìn)行快照,并且將其作為checkpoint ACK消息的一部分發(fā)送給JobManager(master)险耀,該JobManager將其存儲(chǔ)在它的堆上弄喘。
MemoryStateBackend可以配置使用異步快照的方式。雖然我們強(qiáng)烈鼓勵(lì)使用異步快照的方式來避免管道阻塞甩牺,但是請注意蘑志,這個(gè)是一個(gè)新特性,目前默認(rèn)情況下不啟用柴灯。為了啟用這個(gè)狀態(tài)卖漫,用戶可以在初始化 MemoryStateBackend 時(shí)將構(gòu)造函數(shù)中相應(yīng)的布爾標(biāo)識(shí)設(shè)為 true,例如:

    new MemoryStateBackend(MAX_MEM_STATE_SIZE, true);

MemoryStateBackend的局限性:

  • 單個(gè)狀態(tài)的大小默認(rèn)情況下最大為5MB赠群。這個(gè)值可以通過MemoryStateBackend構(gòu)造函數(shù)進(jìn)行增加羊始。
  • 無論配置的最大狀態(tài)大小為多少,狀態(tài)的大小不能超過akka幀大小(見Configuration)
  • 聚合的狀態(tài)必須在JobManager的內(nèi)存中能存放

MemoryStateBackend適用于:

  • 本地開發(fā)和調(diào)試
  • 只有很小狀態(tài)的作業(yè)查描,例如作業(yè)只由record-at-a-time函數(shù)組成(Map突委,F(xiàn)latMap,F(xiàn)ilter冬三,...)匀油。Kafka消費(fèi)者只需要非常小的狀態(tài)。

FsStateBackend

FsStateBackend使用文件系統(tǒng)URL(類型勾笆,地址敌蚜,路徑),例如“hdfs://namenode:40010/flink/checkpoints” 或 “file:///data/flink/checkpoints”.

FsStateBackend將in-flight數(shù)據(jù)存放在TaskManager的內(nèi)存中窝爪。當(dāng)進(jìn)行checkpoint時(shí)弛车,它將狀態(tài)快照寫入到配置的文件系統(tǒng)和目錄。最小的元數(shù)據(jù)存儲(chǔ)在JobManager的內(nèi)存中(或者蒲每,在高可用模式下纷跛,在元數(shù)據(jù)checkpoint中)。

FsStateBackend默認(rèn)使用異步快照以避免在寫狀態(tài)checkpoint時(shí)阻塞處理管道邀杏。要禁用此特性贫奠,用戶可以初始化 MemoryStateBackend 時(shí)將構(gòu)造函數(shù)中相應(yīng)的布爾標(biāo)識(shí)設(shè)為 false,例如:

    new FsStateBackend(path, false);

FsStateBackend適用于:

  • 具有大狀態(tài)望蜡,長窗口唤崭,大key/value狀態(tài)的作業(yè)
  • 所有的高可用性設(shè)置

RocksDBStateBackend

RocksDBStateBackend 使用文件系統(tǒng)URL(類型,地址脖律,路徑)浩姥,例如“hdfs://namenode:40010/flink/checkpoints” 或 “file:///data/flink/checkpoints”.

RocksDBStateBackend將in-flight數(shù)據(jù)存儲(chǔ)在RocksDB數(shù)據(jù)庫中,它(默認(rèn))存儲(chǔ)在TaskManager的data目錄下状您。當(dāng)checkpoint時(shí)勒叠,整個(gè)RocksDB數(shù)據(jù)庫將被checkpoint到配置的文件系統(tǒng)和目錄下兜挨。最小的元數(shù)據(jù)存儲(chǔ)在JobManager的內(nèi)存中(或者,在高可用模式下眯分,在元數(shù)據(jù)checkpoint中)拌汇。

RocksDBStateBackend總是執(zhí)行異步快照。

RocksDBStateBackend的限制:

  • 作為RocksDB的JNI橋接API是基于byte[]的弊决,每個(gè)key和value的最大的支持大小是 2^31字節(jié)噪舀。重要:在RocksDB中使用合并操作的狀態(tài)(例如,ListState)能夠默默的積累到值的size大于 2^31字節(jié)飘诗,并且在下次檢索時(shí)會(huì)失敗与倡。這是目前 RocksDB JNI的限制。

RocksDBStateBackend適用于:

  • 具有大狀態(tài)昆稿,長窗口纺座,大key/value狀態(tài)的作業(yè)
  • 所有的高可用性設(shè)置

注意:你可以保持的狀態(tài)的數(shù)量只受限于磁盤可用空間的大小。相比于將狀態(tài)保存到內(nèi)存的FsStateBackend溉潭,這允許保持非常大的狀態(tài)净响。然而,這也意味著喳瓣,可以達(dá)到的最大的吞吐量會(huì)比狀態(tài)后端的吞吐量要低馋贤。

RocksDBStateBackend是目前唯一提供增量checkpoint的狀態(tài)后端(請參閱此處) 。

配置狀態(tài)后端

如果您不做任何指定畏陕,默認(rèn)的狀態(tài)后端是JobManager配乓。如果你希望為你的集群中的所有作業(yè)創(chuàng)建一個(gè)非默認(rèn)的狀態(tài)后端,你可以通過在flink-conf.yaml中指定一個(gè)新的默認(rèn)后端惠毁。默認(rèn)的狀態(tài)后端可以在每個(gè)作業(yè)的基礎(chǔ)上進(jìn)行覆蓋犹芹,如下所示.

設(shè)置一個(gè)作業(yè)級(jí)的狀態(tài)后端

作業(yè)的狀態(tài)后端通過作業(yè)中的 StreamExecutionEnvironment進(jìn)行設(shè)置,如下述示例所示:

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setStateBackend(new FsStateBackend("hdfs://namenode:40010/flink/checkpoints"));

設(shè)置默認(rèn)狀態(tài)后端

默認(rèn)狀態(tài)后端可以通過在 flink-conf.yaml 中設(shè)置state.backend值指定仁讨。

可能的配置項(xiàng)是jobmanager (MemoryStateBackend), filesystem (FsStateBackend)实昨, rocksdb (RocksDBStateBackend)洞豁,或者實(shí)現(xiàn)了狀態(tài)后端工廠FsStateBackendFactory的類的完全限定類名,例如荒给,為RocksDBStateBackend設(shè)置為org.apache.flink.contrib.streaming.state.RocksDBStateBackendFactory丈挟。

配置文件中的示例部分如下所示:

# The backend that will be used to store operator state checkpoints

state.backend: filesystem

# Directory for storing checkpoints

state.backend.fs.checkpointdir: hdfs://namenode:40010/flink/checkpoints

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市志电,隨后出現(xiàn)的幾起案子曙咽,更是在濱河造成了極大的恐慌,老刑警劉巖挑辆,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件例朱,死亡現(xiàn)場離奇詭異孝情,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)洒嗤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門箫荡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人渔隶,你說我怎么就攤上這事羔挡。” “怎么了间唉?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵绞灼,是天一觀的道長。 經(jīng)常有香客問我呈野,道長低矮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任际跪,我火速辦了婚禮商佛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘姆打。我一直安慰自己良姆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布幔戏。 她就那樣靜靜地躺著玛追,像睡著了一般。 火紅的嫁衣襯著肌膚如雪闲延。 梳的紋絲不亂的頭發(fā)上痊剖,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音垒玲,去河邊找鬼陆馁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛合愈,可吹牛的內(nèi)容都是我干的叮贩。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼佛析,長吁一口氣:“原來是場噩夢啊……” “哼益老!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起寸莫,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤捺萌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后膘茎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桃纯,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡酷誓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了慈参。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呛牲。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖驮配,靈堂內(nèi)的尸體忽然破棺而出娘扩,到底是詐尸還是另有隱情,我是刑警寧澤壮锻,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布琐旁,位于F島的核電站,受9級(jí)特大地震影響猜绣,放射性物質(zhì)發(fā)生泄漏灰殴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一掰邢、第九天 我趴在偏房一處隱蔽的房頂上張望牺陶。 院中可真熱鬧,春花似錦辣之、人聲如沸掰伸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狮鸭。三九已至,卻和暖如春多搀,著一層夾襖步出監(jiān)牢的瞬間歧蕉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國打工康铭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惯退,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓从藤,卻偏偏與公主長得像催跪,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子呛哟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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

  • 原文鏈接 Flink提供了指定狀態(tài)存儲(chǔ)方式和位置的不同的狀態(tài)后端叠荠。 狀態(tài)可以位于Java的堆內(nèi)或堆外匿沛。根據(jù)你的狀態(tài)...
    小C菜鳥閱讀 160評(píng)論 0 0
  • 全世界最紅的貓 2016-04-28FOD工具控FOD工具控 全世界最紅的貓 認(rèn)得這只總是一臉一副欠它一千兩百萬扫责、...
    FOD生活升級(jí)閱讀 654評(píng)論 0 0
  • 永靖縣公安局交警大隊(duì)10月28日工作開展情況:大隊(duì)全天出動(dòng)警力40人,出動(dòng)警車4輛逃呼,查處各類交通違法行為180起鳖孤,...
    孔得銳閱讀 237評(píng)論 0 0
  • 立秋是個(gè)好時(shí)間者娱, 溫?zé)岬奶鞖猓?轉(zhuǎn)眼讓雨呈現(xiàn), 暴雨肆虐苏揣, 讓涼意撒入心田黄鳍, 滿滿的期待, 滿滿的眷戀平匈, 一場秋雨...
    橘子洲的魚閱讀 192評(píng)論 0 2
  • 這個(gè)城市總是在雨中框沟,不是在下雨,就是在準(zhǔn)備下雨增炭。也許忍燥,故事中的煙雨江南就這樣而來的吧。小志想隙姿,煙或許散了吧梅垄,這個(gè)季...
    Iase小文閱讀 326評(píng)論 0 3