溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么在Apache Flink中管理RocksDB內(nèi)存大小

發(fā)布時(shí)間:2021-12-21 09:18:50 來源:億速云 閱讀:284 作者:柒染 欄目:大數(shù)據(jù)

這篇文章給大家介紹怎么在Apache Flink中管理RocksDB內(nèi)存大小,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。



Apache Flink中的RocksDB狀態(tài)后端

在深入了解配置參數(shù)之前,讓我們首先重新討論在flink中如何使用RocksDB來進(jìn)行狀態(tài)管理。當(dāng)您選擇RocksDB作為狀態(tài)后端時(shí),您的狀態(tài)將被序列化成字節(jié)存在堆外內(nèi)存或本地磁盤中。RocksDB是一個(gè)鍵值存儲(chǔ),它被組織為一個(gè)日志結(jié)構(gòu)的合并樹(LMS樹)。當(dāng)用于在Flink中存儲(chǔ)Keyed狀態(tài)時(shí),Key由<Keygroup,Key,Namespace>的序列化字節(jié)組成,而value由序列化之后的state的字節(jié)組成。每次注冊(cè)keyed狀態(tài)時(shí),它都會(huì)映射到column family(類似于傳統(tǒng)數(shù)據(jù)庫(kù)中的表),并且鍵值對(duì)將作為序列化字節(jié)存儲(chǔ)在RocksDB中。這意味著每次READ或WRITE操作都不得不對(duì)數(shù)據(jù)進(jìn)行序列化/反序列化,

使用RocksDB作為狀態(tài)后端有許多優(yōu)點(diǎn):它不受垃圾回收的影響,與堆中的對(duì)象相比,它通常會(huì)有較低的內(nèi)存開銷,并且它是目前唯一支持增量檢查點(diǎn)的選項(xiàng)。此外,使用RocksDB,您的狀態(tài)大小僅受限于可用本地磁盤空間大小,最適合依賴大型狀態(tài)操作的Flink應(yīng)用程序。

如果你不熟悉RocksDB,下圖說明了其基本的READ和WRITE操作。

RocksDB中的寫操作將數(shù)據(jù)存儲(chǔ)在當(dāng)前活動(dòng)的內(nèi)存表(Active MemTable)中。當(dāng)內(nèi)存表已滿時(shí),它將變?yōu)镽EAD ONLY MemTable,并被一個(gè)新的、空閑的active狀態(tài)的MemTable替換。READ ONLY MemTable會(huì)被后臺(tái)線程周期性地flush到磁盤,成為按照key排序的的只讀文件 -- 即所謂的SSTables。反過來,SSTables是不可變的,通過后臺(tái)日志壓縮將他們整合到一起(SSTables的多路歸并)。如前所述,使用RocksDB,每個(gè)注冊(cè)狀態(tài)都是一個(gè)column family,這意味著每個(gè)狀態(tài)都包含自己的MemTables和SSTables。

怎么在Apache Flink中管理RocksDB內(nèi)存大小  
在這里插入圖片描述

在RocksDB中的READ操作首先訪問Active Memory Table以響應(yīng)查詢。如果找不到要搜索的key,則READ操作會(huì)根據(jù)key從最新到最舊READ ONLY MemTables依次查找,直到找到要搜索的key。如果在任何MemTable中都找不到該key,則READ操作將再次從最新的位置開始訪問SSTable。SSTable文件可以從BlockCache、(如果它包含未壓縮的表文件)從操作系統(tǒng)的文件高速緩存獲得,或者在最壞的情況下從本地磁盤獲得。像SST級(jí)別的bloom filters的可選索引可以幫助避免命中磁盤。

 

3種配置來管理您的RocksDB內(nèi)存消耗

現(xiàn)在我們已經(jīng)使用Apache Flink建立了基于RocksDB的一些功能,讓我們來看看可以幫助您更有效地管理RocksDB內(nèi)存大小的配置選項(xiàng)。請(qǐng)注意,以下選項(xiàng)并非是全面的,您可以使用Apache Flink 1.6中引入的State TTL(Time-To-Live)功能管理Flink應(yīng)用程序的狀態(tài)大小。以下三個(gè)配置是幫助您有效管理RocksDB資源消耗的良好起點(diǎn):

 

1.block_cache_size

此配置將最終控制在內(nèi)存中緩存的未壓縮的最大的塊數(shù)。隨著塊數(shù)的增加,內(nèi)存大小也會(huì)增加 - 因此,通過預(yù)先配置它,您可以保持特定的內(nèi)存消耗級(jí)別。

 

2.write_buffer_size

此配置建立并控制RocksDB中MemTable的最大大小。Active MemTables和READ ONLY MemTables最終將影響RocksDB中的內(nèi)存大小,因此盡早調(diào)整它可能會(huì)為您節(jié)省一些麻煩。

 

3.max_write_buffer_number

在RocksDB將state作為SS Tables刷新到本地磁盤之前,此配置決定并控制內(nèi)存中保留的最大MemTable的數(shù)量。這實(shí)際上也決定了在內(nèi)存中 READ ONLY 狀態(tài)的MemTables的最大數(shù)量。

除了上面提到的配置之外,您還可以選擇性的配置消耗額外內(nèi)存空間的索引和 bloom filters ,以及側(cè)邊的table cache。表緩存不僅會(huì)占用RocksDB中的額外內(nèi)存,它還會(huì)保存打開文件描述符到默認(rèn)情況下不受限的SST文件,如果配置不正確,可能會(huì)和操作系統(tǒng)的配置發(fā)生沖突。

我們剛剛引導(dǎo)您完成了一些用RocksDB作為Flink中的狀態(tài)后端的的配置選項(xiàng),這將幫助我們有效的管理內(nèi)存大小。

關(guān)于怎么在Apache Flink中管理RocksDB內(nèi)存大小就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI