State Backends

原文鏈接


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

  • 在窗口中收集或聚合元素,直到觸發狀態存儲
  • 轉換函數可能使用key/value狀態接口來存儲元素
  • 轉換函數可能實現CheckpointedFunction接口來使得它們的本地變量容錯。

參見流API指南中的狀態部分

當checkpoint被激活時,狀態會被持久化到checkpoint,以防止數據丟失和無縫恢復。狀態在內部如何組織和它們如何以及在哪持久化,依賴于所選的狀態后端

可選的狀態后端

Flink內部提供了這些狀態后端:

  • MemoryStateBackend
  • FsStateBackend
  • RocksDBStateBackend

如果沒有其他配置,系統將使用MemoryStateBackend。

MemoryStateBackend

MemoryStateBackend將內部的數據保存在Java堆上。 Key/value狀態和窗口操作符持有存儲值,觸發器等的哈希表。
當進行checkpoint時,這個狀態后端會對當前的狀態進行快照,并且將其作為checkpoint ACK消息的一部分發送給JobManager(master),該JobManager將其存儲在它的堆上。
MemoryStateBackend可以配置使用異步快照的方式。雖然我們強烈鼓勵使用異步快照的方式來避免管道阻塞,但是請注意,這個是一個新特性,目前默認情況下不啟用。為了啟用這個狀態,用戶可以在初始化 MemoryStateBackend 時將構造函數中相應的布爾標識設為 true,例如:

    new MemoryStateBackend(MAX_MEM_STATE_SIZE, true);

MemoryStateBackend的局限性:

  • 單個狀態的大小默認情況下最大為5MB。這個值可以通過MemoryStateBackend構造函數進行增加。
  • 無論配置的最大狀態大小為多少,狀態的大小不能超過akka幀大小(見Configuration)
  • 聚合的狀態必須在JobManager的內存中能存放

MemoryStateBackend適用于:

  • 本地開發和調試
  • 只有很小狀態的作業,例如作業只由record-at-a-time函數組成(Map,FlatMap,Filter,...)。Kafka消費者只需要非常小的狀態。

FsStateBackend

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

FsStateBackend將in-flight數據存放在TaskManager的內存中。當進行checkpoint時,它將狀態快照寫入到配置的文件系統和目錄。最小的元數據存儲在JobManager的內存中(或者,在高可用模式下,在元數據checkpoint中)。

FsStateBackend默認使用異步快照以避免在寫狀態checkpoint時阻塞處理管道。要禁用此特性,用戶可以初始化 MemoryStateBackend 時將構造函數中相應的布爾標識設為 false,例如:

    new FsStateBackend(path, false);

FsStateBackend適用于:

  • 具有大狀態,長窗口,大key/value狀態的作業
  • 所有的高可用性設置

RocksDBStateBackend

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

RocksDBStateBackend將in-flight數據存儲在RocksDB數據庫中,它(默認)存儲在TaskManager的data目錄下。當checkpoint時,整個RocksDB數據庫將被checkpoint到配置的文件系統和目錄下。最小的元數據存儲在JobManager的內存中(或者,在高可用模式下,在元數據checkpoint中)。

RocksDBStateBackend總是執行異步快照。

RocksDBStateBackend的限制:

  • 作為RocksDB的JNI橋接API是基于byte[]的,每個key和value的最大的支持大小是 2^31字節。重要:在RocksDB中使用合并操作的狀態(例如,ListState)能夠默默的積累到值的size大于 2^31字節,并且在下次檢索時會失敗。這是目前 RocksDB JNI的限制。

RocksDBStateBackend適用于:

  • 具有大狀態,長窗口,大key/value狀態的作業
  • 所有的高可用性設置

注意:你可以保持的狀態的數量只受限于磁盤可用空間的大小。相比于將狀態保存到內存的FsStateBackend,這允許保持非常大的狀態。然而,這也意味著,可以達到的最大的吞吐量會比狀態后端的吞吐量要低。

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

配置狀態后端

如果您不做任何指定,默認的狀態后端是JobManager。如果你希望為你的集群中的所有作業創建一個非默認的狀態后端,你可以通過在flink-conf.yaml中指定一個新的默認后端。默認的狀態后端可以在每個作業的基礎上進行覆蓋,如下所示.

設置一個作業級的狀態后端

作業的狀態后端通過作業中的 StreamExecutionEnvironment進行設置,如下述示例所示:

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

設置默認狀態后端

默認狀態后端可以通過在 flink-conf.yaml 中設置state.backend值指定。

可能的配置項是jobmanager (MemoryStateBackend), filesystem (FsStateBackend), rocksdb (RocksDBStateBackend),或者實現了狀態后端工廠FsStateBackendFactory的類的完全限定類名,例如,為RocksDBStateBackend設置為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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內容

  • 原文鏈接 Flink提供了指定狀態存儲方式和位置的不同的狀態后端。 狀態可以位于Java的堆內或堆外。根據你的狀態...
    小C菜鳥閱讀 168評論 0 0
  • 全世界最紅的貓 2016-04-28FOD工具控FOD工具控 全世界最紅的貓 認得這只總是一臉一副欠它一千兩百萬、...
    FOD生活升級閱讀 677評論 0 0
  • 永靖縣公安局交警大隊10月28日工作開展情況:大隊全天出動警力40人,出動警車4輛,查處各類交通違法行為180起,...
    孔得銳閱讀 249評論 0 0
  • 立秋是個好時間, 溫熱的天氣, 轉眼讓雨呈現, 暴雨肆虐, 讓涼意撒入心田, 滿滿的期待, 滿滿的眷戀, 一場秋雨...
    橘子洲的魚閱讀 194評論 0 2
  • 這個城市總是在雨中,不是在下雨,就是在準備下雨。也許,故事中的煙雨江南就這樣而來的吧。小志想,煙或許散了吧,這個季...
    Iase小文閱讀 334評論 0 3