Flink記憶體優化

2022-07-15 06:18:06 字數 1964 閱讀 2384

在大資料領域,大多數開源框架(hadoop、spark、storm)都是基於jvm執行,但是jvm的記憶體管理機制往往存在著諸多類似outofmemoryerror的問題,主要是因為建立過多的物件例項而超過jvm的最大堆記憶體限制,卻沒有被有效**掉,這就在很大程度上影響了系統的穩定性,尤其對於大資料應用,面對大量的資料物件產生,僅僅靠jvm所提供的的各種垃圾**機制很難解決記憶體溢位的問題。在開源框架中有很多框架都實現了自己的記憶體管理,例如apache spark的tungsten專案,在一定程度上減輕了框架對jvm垃圾**機制的依賴,從而更好地使用jvm來處理大規模資料集。

flink也基於jvm實現了自己的記憶體管理,將jvm格局記憶體區分為unmanned heap、flink managed heap、network buffers三個區域。在flink內部對flink managed heap進行管理,在啟動集群的過程中直接將堆記憶體初始化成memory pages pool,也就是將記憶體全部以二進位制陣列的方式占用,形成虛擬記憶體使用空間。新建立的物件都是以序列化成二進位制資料的方式儲存在記憶體頁面池中,當完成計算後資料物件flink就會將page置空,而不是通過jvm進行垃圾**,保證資料物件的建立永遠不會超過jvm堆記憶體大小,也有效地避免了因為頻繁gc導致的系統穩定性問題。

jobmanager配置

jobmanager在flink系統中主要承擔管理集群資源、接受任務、排程task、收集任務狀態以及管理taskmanager的功能,jobmanager本身並不直接參與資料的計算過程中,因此jobmanager的記憶體配置項不是特別多,只要指定jobmanager堆記憶體大小即可。

jobmanager.heap.size: 設定jobmanager的堆記憶體大小,預設為1024mb。

taskmanager配置

taskmanager作為flink集群中的工作節點,左右任務的計算邏輯均執行在taskmanager之上,因此對記憶體配置顯得尤為重要,可以通過以下引數配置對taskmanager進行優化和調整。

對應的官方文件:

flink的網路快取優化

flink將jvm堆記憶體切分為三個部分,其中一部門為network buffers記憶體。network buffers記憶體是flink資料互動層的關鍵記憶體資源,主要目的是快取分布式資料處理過程中的輸入資料。通常情況下,比較大的network buffers意味著更高的拓土量。如果系統出現"insufficient number of network buffers"的錯誤,一般是因為network buffers配置過低導致,因此,在這種情況下,需要適當調整taskmanager上network buffers的記憶體大小,以使得系統能夠達到相對較高的吞吐量。

目前flink能夠調整network buffer記憶體大小的方式有兩種:一種是通過直接指定network buffers記憶體數量的方式,另外一種是通過配置記憶體比例的方式。

taskmanager.network.numberofbuffers: 指定 network 堆疊 buffer 記憶體塊的數量。

taskmanager.memory.segment-size.: 記憶體管理器和 network 棧使用的記憶體 buffer 大小, 預設為 32kb

taskmanager.network.memory.fraction: jvm 中用於 network buffers 的記憶體比例。

taskmanager.network.memory.min: 最小的 network buffers 記憶體大小, 預設為 64mb。

taskmanager.network.memory.max: 最大的 network buffers 記憶體大小, 預設 1gb。

taskmanager.memory.segment-size: 記憶體管理器和 network 棧使用的 buffer 大小,預設為 32kb。

Flink集群之Flink集群配置優化項

jobmanager rpc通訊位址,一般需要配置指定的jobmanager的ip位址,預設的localhost不適合多節點集群模式 jobmanager的jvm堆記憶體,預設為1024m,可以根據集群規模適當增加 taskmanager的jvm堆記憶體,預設為1024m,可以根據資料計算規模以及狀...

flink學習 flink架構

flink結構 graph 2個併發度 source為1個併發度 的sockettextstreamwordcount四層執行圖的演變過程 jobgraph streamgraph經過優化後生成了 jobgraph,提交給 jobmanager 的資料結構。executiongraph jobman...

Flink1 11記憶體模型與引數調整

flink taskmanager啟動日誌 total process memory flink總資源數 2048m,引數 taskmanager.memory.process.size jvm metaspace jvm元空間,引數 taskmanager.memory.jvm metaspace...