国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Flink系列之Flink中StateBackend深入剖析和應(yīng)用

這篇具有很好參考價(jià)值的文章主要介紹了Flink系列之Flink中StateBackend深入剖析和應(yīng)用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


title: Flink系列


一、Flink StateBackend 深入剖析和應(yīng)用

? StateBackend 定義了狀態(tài)是如何存儲(chǔ)的,不同的 State Backend 會(huì)采用不同的方式來存儲(chǔ)狀態(tài),核心入口是: StateBackend, Flink 提供了三種不同形式的存儲(chǔ)后端,分別是 MemoryStateBackend, FsStateBackend 和 RocksDBStateBackend。

  • MemoryStateBackend 會(huì)將工作狀態(tài)(Task State)存儲(chǔ)在 TaskManager 的內(nèi)存中,將檢查點(diǎn)(Job State)存儲(chǔ)在 JobManager 的內(nèi)存中,速度很快,不支持持久化,通常用來存儲(chǔ)一些 state 量小的情況下的 state。這種方式是非常不安全的,且受限于JobManager的內(nèi)存大小,主要在開發(fā)調(diào)試中使用。

  • FsStateBackend 會(huì)將工作狀態(tài)存儲(chǔ)在 TaskManager 的內(nèi)存中,將檢查點(diǎn)存儲(chǔ)在文件系統(tǒng)中(通常是分布式文件系統(tǒng)),用來存儲(chǔ) state 量比較大的,window 窗口很長的一些 job 的 state 比較合適。生產(chǎn)環(huán)境常用此方案。

  • RocksDBStateBackend 會(huì)把狀態(tài)存儲(chǔ)在 RocksDB 中,將檢查點(diǎn)存儲(chǔ)在文件系統(tǒng)中(類似 FsStateBackend),和 MemoryStateBackend 對(duì)比是速度快,GC 少,支持異步 Snapshot 持久化。用來存儲(chǔ) state 量比較大的,window 窗口很長的一些 job 的 state 比較合適。

? 綜上所述,MemoryStateBackend 和 FsStateBackend 都是在內(nèi)存中進(jìn)行狀態(tài)管理,所以可以獲取較低的讀寫延遲,但會(huì)受限于 TaskManager 的內(nèi)存大??;而RocksDBStateBackend 直接將 State 存儲(chǔ)到 RocksDB 數(shù)據(jù)庫中,所以不受 JobManager 的內(nèi)存限制,但會(huì)有讀寫延遲,同時(shí) RocksDBStateBackend 支持增量備份,這是其他兩個(gè)都不支持的特性。一般來說,如果不是對(duì)延遲有極高的要求,RocksDBStateBackend 是更好的選擇。

? 淘汰掉原來的三種實(shí)現(xiàn),提供兩種新的實(shí)現(xiàn)的目的:為了接口統(tǒng)一!底層原理沒變。window編程也被統(tǒng)一了,Time編程也被統(tǒng)一了。

配置:
state.backend: hashmap
state.checkpoint-storage: jobmanager
state.checkpoints.dir: hdfs://hadoop10/flink/checkpoints
state.savepoints.dir: hdfs://hadoop10/flink/savepoints

實(shí)現(xiàn)支持 MemoryStateBackend
HashMapStateBackend
FsStateBackend
HashMapStateBackend
RocksDBStateBackend
EmbeddedRocksDBStateBackend
代號(hào) jobmanager
hashmap
filesystem
hashmap
rocksdb
Task State TaskManager 堆內(nèi)存中 TaskManager 堆內(nèi)存中 TaskManager 中的 RocksDB 實(shí)例中
Job State JobManager 堆內(nèi)存中
hashmap 的話基于 CheckpointStorage 來定
外部高可用文件系統(tǒng),比如 HDFS
hashmap 的話基于 CheckpointStorage 來定
外部高可用文件系統(tǒng),比如 HDFS
缺點(diǎn) 只能保存數(shù)據(jù)量小的狀態(tài)
狀態(tài)數(shù)據(jù)有可能會(huì)丟失
狀態(tài)大小受TaskManager內(nèi)存限制(默認(rèn)支持5M) 狀態(tài)訪問速度有所下降
優(yōu)點(diǎn) 開發(fā)測試很方便
性能好
狀態(tài)訪問速度很快
狀態(tài)信息不會(huì)丟失
可以存儲(chǔ)超大量的狀態(tài)信息
狀態(tài)信息不會(huì)丟失
使用場景 本地開發(fā)測試 State 量比較大
分鐘級(jí) window 窗口的狀態(tài)數(shù)據(jù)
生產(chǎn)環(huán)境使用
State 量超大
小時(shí)級(jí) window 窗口的狀態(tài)數(shù)據(jù)
生產(chǎn)環(huán)境使用

細(xì)粒度:Task State: 一個(gè) Application 會(huì)運(yùn)行很多的 Task, 每個(gè) Task 運(yùn)行的時(shí)候,都有自己的狀態(tài), 故障轉(zhuǎn)移 = FailOverStrategy

  • 要么是 TaskManager 的堆內(nèi)存

  • 要么是 RocksDB 中

粗粒度:Job State:在某個(gè)時(shí)候,通過某種手段(checkpoint)把這個(gè) job 的所有 Task 的 state 做一個(gè)持久化,就形成了 job 的 state, 重啟策略 = RestartStrategy

  • 要么是 JobManager 的堆內(nèi)存

  • 要么是外部的高可用系統(tǒng)中,可以是HDFS

Flink StateBackend 的三種實(shí)現(xiàn)對(duì)比:

1.1 MemoryStateBackend

? 默認(rèn)情況下,狀態(tài)信息是存儲(chǔ)在 TaskManager 的堆內(nèi)存中的,checkpoint 的時(shí)候?qū)顟B(tài)保存到 JobManager 的堆內(nèi)存中。

缺點(diǎn):
	只能保存數(shù)據(jù)量小的狀態(tài)
	狀態(tài)數(shù)據(jù)有可能會(huì)丟失
優(yōu)點(diǎn):
	開發(fā)測試很方便

state.backend,Flink,數(shù)據(jù)計(jì)算,Flink,大數(shù)據(jù)

1.2 FSStateBackend

狀態(tài)信息存儲(chǔ)在 TaskManager 的堆內(nèi)存中的,checkpoint 的時(shí)候?qū)顟B(tài)保存到指定的文件中 (HDFS 等文件系統(tǒng))

缺點(diǎn):
	狀態(tài)大小受TaskManager內(nèi)存限制(默認(rèn)支持5M)
優(yōu)點(diǎn):
	狀態(tài)訪問速度很快
	狀態(tài)信息不會(huì)丟失
用于:
	生產(chǎn),也可存儲(chǔ)狀態(tài)數(shù)據(jù)量大的情況

state.backend,Flink,數(shù)據(jù)計(jì)算,Flink,大數(shù)據(jù)

1.3 RocksDBStateBackend

? 狀態(tài)信息存儲(chǔ)在 RocksDB 數(shù)據(jù)庫 (key-value 的數(shù)據(jù)存儲(chǔ)服務(wù)), 最終保存在本地文件中。checkpoint 的時(shí)候?qū)顟B(tài)保存到指定的文件中 (HDFS 等文件系統(tǒng))

缺點(diǎn):
	狀態(tài)訪問速度有所下降
優(yōu)點(diǎn):
	可以存儲(chǔ)超大量的狀態(tài)信息
	狀態(tài)信息不會(huì)丟失
用于:
	生產(chǎn),可以存儲(chǔ)超大量的狀態(tài)信息

state.backend,Flink,數(shù)據(jù)計(jì)算,Flink,大數(shù)據(jù)

二、Flink StateBackend 原理剖析與實(shí)踐

第一種:單任務(wù)調(diào)整

修改當(dāng)前任務(wù)代碼
env.setStateBackend(new FsStateBackend("hdfs://hadoop10/flink/checkpoints"));
env.setStateBackend(new MemoryStateBackend());
env.setStateBackend(new RocksDBStateBackend(filebackend, true));

第二種:全局調(diào)整

修改 flink-conf.yaml
state.backend: filesystem
state.checkpoints.dir: hdfs://hadoop10/flink/checkpoints

注意:state.backend的值可以是下面幾種:
1、jobmanager(MemoryStateBackend)
2、filesystem(FsStateBackend)
3、rocksdb(RocksDBStateBackend)

MemoryStateBackend(老版本的默認(rèn)實(shí)現(xiàn)) 和 FsStateBackend 的代碼寫法,其實(shí)它們已經(jīng)被廢棄,建議使用:HashMapStateBackend(新版本的默認(rèn)實(shí)現(xiàn))

用的是HashMapStateBackend,但是給job級(jí)別的數(shù)據(jù)保存到 Job Manager 的堆內(nèi)內(nèi)存中:

// HashMapStateBackend 替代 MemoryStateBackend
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 1、設(shè)置使用 HashMapStateBackend,Task State 存儲(chǔ)在 TaskManager 的堆內(nèi)存中
env.setStateBackend(new HashMapStateBackend());
// 2、這樣設(shè)置 checkpoint 的 state 存儲(chǔ)方式:把 job State 存儲(chǔ)在 JobManager 的堆內(nèi)存中
env.getCheckpointConfig().setCheckpointStorage(new JobManagerCheckpointStorage());

用的是HashMapStateBackend,但是給job級(jí)別的數(shù)據(jù)保存到 Job Manager 的外面的高可用系統(tǒng)HDFS中:

// HashMapStateBackend 替代 FsStateBackend
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 1、設(shè)置使用 HashMapStateBackend,Task State 存儲(chǔ)于 TaskManager 堆內(nèi)存中
env.setStateBackend(new HashMapStateBackend());
// 2、需要設(shè)置外部高可用文件系統(tǒng)存儲(chǔ)路徑用來保存 Job State
env.getCheckpointConfig().setCheckpointStorage("hdfs://hadoop10/flink/checkpoints");

RocksDBStateBackend 代碼寫法,其實(shí) RocksDBStateBackend 也已經(jīng)被廢棄,建議使用 EmbeddedRocksDBStateBackend

// EmbeddedRocksDBStateBackend
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 1、設(shè)置 EmbeddedRocksDBStateBackend,Task State 存儲(chǔ)在 RocksDB 中(內(nèi)存+磁盤)
env.setStateBackend(new EmbeddedRocksDBStateBackend());
// 2、設(shè)置外部高可用文件系統(tǒng)存儲(chǔ)路徑用來保存 Job State
env.getCheckpointConfig().setCheckpointStorage("hdfs://hadoop10/flink/checkpoints");

如果使用 RocksDB 的方式,需要引入依賴:

<!-- https://mvnrepository.com/artifact/org.apache.flink/flink-statebackend-rocksdb -->
<dependency>
	<groupId>org.apache.flink</groupId>
	<artifactId>flink-statebackend-rocksdb_2.12</artifactId>
	<version>1.14.3</version>
	<scope>test</scope>
</dependency>


聲明:
????????文章中代碼及相關(guān)語句為自己根據(jù)相應(yīng)理解編寫,文章中出現(xiàn)的相關(guān)圖片為自己實(shí)踐中的截圖和相關(guān)技術(shù)對(duì)應(yīng)的圖片,若有相關(guān)異議,請(qǐng)聯(lián)系刪除。感謝。轉(zhuǎn)載請(qǐng)注明出處,感謝。


By luoyepiaoxue2014

B站: https://space.bilibili.com/1523287361 點(diǎn)擊打開鏈接
微博地址: http://weibo.com/luoyepiaoxue2014 點(diǎn)擊打開鏈接文章來源地址http://www.zghlxwxcb.cn/news/detail-577284.html

到了這里,關(guān)于Flink系列之Flink中StateBackend深入剖析和應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C語言遞歸:深入剖析與實(shí)戰(zhàn)應(yīng)用

    一、引言 遞歸是計(jì)算機(jī)科學(xué)中一種重要的編程思想,它通過將大問題分解為小問題,實(shí)現(xiàn)了代碼的簡潔與高效。在C語言中,遞歸也有著廣泛的應(yīng)用。本文將對(duì)C語言中的遞歸進(jìn)行深入剖析,帶你領(lǐng)略遞歸的魅力。 遞歸是指在函數(shù)中調(diào)用自身的過程。一個(gè)函數(shù)直接或間接調(diào)用自

    2024年02月21日
    瀏覽(23)
  • 深入剖析 Qt QMultiMap :原理、應(yīng)用與技巧

    隨著軟件開發(fā)的不斷演進(jìn),數(shù)據(jù)結(jié)構(gòu)在程序設(shè)計(jì)中扮演著至關(guān)重要的角色。它們?yōu)殚_發(fā)人員提供了豐富的工具來有效地管理和操縱數(shù)據(jù)。在這個(gè)博客中,我們將重點(diǎn)關(guān)注一種特殊的數(shù)據(jù)結(jié)構(gòu)——QMultiMap,這是Qt框架中提供的一個(gè)強(qiáng)大且實(shí)用的容器類。在接下來的文章中,我們

    2023年04月21日
    瀏覽(22)
  • 深入剖析 Qt QMap:原理、應(yīng)用與技巧

    QMap是Qt框架中的一個(gè)關(guān)聯(lián)容器類,用于存儲(chǔ)鍵值對(duì)。它提供了高效且易于使用的方法來處理鍵值對(duì)數(shù)據(jù),使得開發(fā)者可以在各種實(shí)際場景中輕松地存儲(chǔ)和檢索數(shù)據(jù)。QMap內(nèi)部使用平衡二叉樹(紅黑樹)作為底層數(shù)據(jù)結(jié)構(gòu),提供了高效的插入、刪除和查找操作。掌握QMap及其基本

    2023年04月21日
    瀏覽(21)
  • 深入剖析 Java 類屬性與類方法的應(yīng)用

    Java 類屬性,也稱為字段,是類中的變量。它們用于存儲(chǔ)與類相關(guān)的數(shù)據(jù)。 創(chuàng)建類屬性 在類定義中聲明屬性: 訪問類屬性 使用點(diǎn)語法訪問對(duì)象的屬性: 修改類屬性 可以修改對(duì)象的屬性值: 屬性類型 屬性可以是任何數(shù)據(jù)類型,包括: 基本類型:int、double、boolean、char等 引

    2024年02月21日
    瀏覽(17)
  • 深入剖析HTTP和HTTPS代理在爬蟲中的應(yīng)用價(jià)值

    在當(dāng)今信息時(shí)代,數(shù)據(jù)是無處不在且極其寶貴的資源。對(duì)于從互聯(lián)網(wǎng)上獲取大量結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)的需求而言,網(wǎng)絡(luò)爬蟲成為一種強(qiáng)有力的工具。然而,在實(shí)際操作過程中,我們常常會(huì)面臨許多挑戰(zhàn)和限制。 其中一個(gè)主要問題就是目標(biāo)網(wǎng)站可能會(huì)設(shè)置反扒機(jī)制來阻止自動(dòng)

    2024年02月09日
    瀏覽(40)
  • Flink系列之:Flink CDC深入了解MySQL CDC連接器

    Flink系列之:Flink CDC深入了解MySQL CDC連接器

    增量快照讀取是一種讀取表快照的新機(jī)制。與舊的快照機(jī)制相比,增量快照具有許多優(yōu)點(diǎn),包括: (1)在快照讀取期間,Source 支持并發(fā)讀取 (2)在快照讀取期間,Source 支持進(jìn)行 chunk 粒度的 checkpoint (3)在快照讀取之前,Source 不需要數(shù)據(jù)庫鎖權(quán)限。 如果希望 source 并行運(yùn)

    2024年02月02日
    瀏覽(30)
  • 深入云原生—基于KubeWharf深度剖析-以公司實(shí)際應(yīng)用場景為例深度解讀

    深入云原生—基于KubeWharf深度剖析-以公司實(shí)際應(yīng)用場景為例深度解讀

    各位好,這里是難忘,本人對(duì)云原生也是研究了2年多了,算是略有所得,本次就來深入云原生—基于KubeWharf深度剖析場景與解讀。我們需要先了解一下 KubeWharf,可能很多人都感覺到有點(diǎn)陌生吧,下面我們來一起學(xué)習(xí)! KubeWharf?是字節(jié)跳動(dòng)基礎(chǔ)架構(gòu)團(tuán)隊(duì)在對(duì)?Kubernetes?進(jìn)行了大

    2024年01月23日
    瀏覽(29)
  • 【深入淺出RocketMQ原理及實(shí)戰(zhàn)】「底層原理挖掘系列」透徹剖析貫穿RocketMQ的消息消費(fèi)長輪訓(xùn)機(jī)制體系的原理分析

    使用系統(tǒng)控制讀取操作的DefaultMQPushConsumer可以自動(dòng)調(diào)用傳入的處理方法來處理收到的消息。通過設(shè)置各種參數(shù)和傳入處理消息的函數(shù),使用DefaultMQPushConsumer的主要目的是方便配置和處理消息。在收到消息后,系統(tǒng)會(huì)自動(dòng)保存Offset,并且如果加入了新的DefaultMQPushConsumer,系統(tǒng)會(huì)

    2024年02月11日
    瀏覽(22)
  • 【flink番外篇】7、flink的State(Keyed State和operator state)介紹及示例(2) - operator state

    【flink番外篇】7、flink的State(Keyed State和operator state)介紹及示例(2) - operator state

    一、Flink 專欄 Flink 專欄系統(tǒng)介紹某一知識(shí)點(diǎn),并輔以具體的示例進(jìn)行說明。 1、Flink 部署系列 本部分介紹Flink的部署、配置相關(guān)基礎(chǔ)內(nèi)容。 2、Flink基礎(chǔ)系列 本部分介紹Flink 的基礎(chǔ)部分,比如術(shù)語、架構(gòu)、編程模型、編程指南、基本的datastream api用法、四大基石等內(nèi)容。 3、

    2024年01月22日
    瀏覽(29)
  • 【flink番外篇】7、flink的State(Keyed State和operator state)介紹及示例(1) - Keyed State

    一、Flink 專欄 Flink 專欄系統(tǒng)介紹某一知識(shí)點(diǎn),并輔以具體的示例進(jìn)行說明。 1、Flink 部署系列 本部分介紹Flink的部署、配置相關(guān)基礎(chǔ)內(nèi)容。 2、Flink基礎(chǔ)系列 本部分介紹Flink 的基礎(chǔ)部分,比如術(shù)語、架構(gòu)、編程模型、編程指南、基本的datastream api用法、四大基石等內(nèi)容。 3、

    2024年01月17日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包