【背景】
之前對(duì)flink的task slot的理解太淺了,重新捋一下相關(guān)知識(shí)點(diǎn)
為什么需要Task Slot
我們知道,flink中每個(gè)TaskManager都是一個(gè)?JVM?進(jìn)程,可以在單獨(dú)的線程中執(zhí)行一個(gè)或多個(gè)?subtask(線程)。但是TaskManager?的計(jì)算資源是有限的,并不是所有任務(wù)都可以放在同一個(gè)?TaskManager?上并行執(zhí)行。并行的任務(wù)越多,每個(gè)線程的資源就會(huì)越少。為了控制并發(fā)量,即限制一個(gè)?TaskManager?能同時(shí)接受多少個(gè)?task,我們需要在?TaskManager?上對(duì)每個(gè)任務(wù)運(yùn)行所占用的資源做出明確的劃分,這就是所謂的task slot(任務(wù)槽)。
Task Slot是什么
每個(gè)(task?slot)其實(shí)表示了?TaskManager?擁有計(jì)算資源的一個(gè)固定大小的子集。?這些資源就是用來(lái)獨(dú)立執(zhí)行一個(gè)subtask的。因此,ResourceManager在做資源分配管理的時(shí)候,最小的單位就是slot。
具體來(lái)說(shuō),有 n?個(gè)?slot?的?TaskManager,會(huì)將其托管內(nèi)存?1/n?用于每個(gè)?slot。分配資源意味著?subtask?不會(huì)與其他作業(yè)的?subtask?競(jìng)爭(zhēng)內(nèi)存,內(nèi)存是隔離的。
注意此處沒(méi)有?CPU?隔離,因此不同slot中的subtask會(huì)共享CPU。
通過(guò)調(diào)整?task?slot?的數(shù)量,用戶(hù)可以定義?subtask?如何互相隔離。如果每個(gè)?TaskManager?只有一個(gè)?slot,這意味著這個(gè)slot里面的?task?組將獨(dú)享?JVM?。如果TaskManager包含多個(gè)Slot,那么同一個(gè)TaskManager中多個(gè)Slot內(nèi)的task可以共享JVM資源,比如共享TCP連接(通過(guò)多路復(fù)用)、心跳信息、部分?jǐn)?shù)據(jù)結(jié)構(gòu)等,從而減少了每個(gè)?task?的開(kāi)銷(xiāo)。
TCP?多路復(fù)用允許單個(gè)服務(wù)器進(jìn)程同時(shí)處理多個(gè)?TCP?連接。這通過(guò)使用一個(gè)或多個(gè)多路復(fù)用器來(lái)實(shí)現(xiàn),多路復(fù)用器是一種內(nèi)核機(jī)制,它可以監(jiān)視多個(gè)文件描述符(如套接字)的活動(dòng)。
官方建議將Slot數(shù)目設(shè)置為T(mén)askManager下可用的CPU核心數(shù),那么平均下來(lái),每個(gè)Slot都能獲得1個(gè)CPU核心(因?yàn)閟lot只隔離內(nèi)存不隔離CPU,所以無(wú)法強(qiáng)制每個(gè)slot獨(dú)占某個(gè)cpu核心)。但考慮到超線程,可以讓slotNumber=2*cpuCore.
比如我們有2個(gè)?TaskManager? ,每個(gè)TaskManager?設(shè)置了3個(gè)slot,那么slot總數(shù)是6?,在執(zhí)行任務(wù)的時(shí)候,如下圖:
Task Slot?有哪些資源?
Task?Manager?中有固定數(shù)量的?Slot?,Slot?的具體數(shù)量由配置決定。同一?Task?Manager?上?Slot?之間沒(méi)有差別,每一個(gè)?Slot?都一樣大,即資源一樣多。
每個(gè)?slot?都能跑由多個(gè)連續(xù)?task?組成的一個(gè)?pipeline,比如?MapFunction?的第n個(gè)并行實(shí)例和?ReduceFunction?的第n個(gè)并行實(shí)例可以組成一個(gè)?pipeline。通過(guò)動(dòng)態(tài)的對(duì)槽的大小和數(shù)量的調(diào)整,就可以把任務(wù)的執(zhí)行較好的并行起來(lái)。
slot隔離主要是對(duì)內(nèi)存的隔離,CPU本身是不做隔離的,CPU在不同的slot之間是可以共享的。
slot內(nèi)存是平均分配的,比如機(jī)器上有16G內(nèi)存,如果劃分4個(gè)slot的話,那每個(gè)slot就是4G內(nèi)存了。如果每個(gè)slot內(nèi)存太小的話,任務(wù)就執(zhí)行不下去了,內(nèi)存直接被撐爆這個(gè)是完全有可能的。
JobManager拿到任務(wù)執(zhí)行計(jì)劃后,它如何確定到底需要多少個(gè)slot:只要看整個(gè)作業(yè)里面,并行度最高的那個(gè)算子設(shè)置的并行度就可以了,只要滿(mǎn)足它的需求,別的就都能滿(mǎn)足了。
SlotSharing
為了更高效地使用資源,Flink默認(rèn)允許同一個(gè)Job中不同Task的SubTask運(yùn)行在同一個(gè)Slot中,這就是SlotSharing,例如一個(gè)作業(yè)從Source到Sink的所有子任務(wù)都可以放置在一個(gè)Slot中,這樣數(shù)據(jù)交換成本更低。
為什么SlotSharing可以提升資源利用率呢?因?yàn)椴煌瑂ubtask的內(nèi)存使用量是不同的,它們被分配到不同的slot后,會(huì)導(dǎo)致有的slot內(nèi)存使用大,有的slot內(nèi)存使用小。如果不允許slotsharding,slot資源就沒(méi)有得到充分的利用。
?
但是slotsharding注意以下描述中的幾個(gè)關(guān)鍵條件:
1.必須是同一個(gè)Job。slot是給Job分配的資源,目的就是隔離各個(gè)Job,如果跨Job共享,隔離就失效了;
2.必須是不同Task的Subtask,其實(shí)就是讓不同操作共享資源,讓資源消耗盡可能平均。
3.默認(rèn)是允許sharing的。
舉個(gè)例子,下圖中兩個(gè)TaskManager節(jié)點(diǎn)共有6個(gè)slot,5個(gè)SubTask,其中sink的并行度為1,另外兩個(gè)SubTask的并行度為2。此時(shí)由于Subtask(虛線圓角框,5個(gè))少于Slot個(gè)數(shù)(6個(gè)),所以每個(gè)Subtask獨(dú)占一個(gè)Slot,沒(méi)有SlotSharing(想想也是,如果此時(shí)還進(jìn)行slotsharing,就是明明有空余的slot,卻讓多少subtask去擠破頭搶同一個(gè)slot的資源,不合理)
下面我們把并行度改為6,此時(shí)如果不支持slot?sharding,即仍然讓每個(gè)subtask獨(dú)占一個(gè)slot,那么會(huì)導(dǎo)致的問(wèn)題是:執(zhí)行速度很慢的subtask會(huì)長(zhǎng)時(shí)間占用一個(gè)slot,導(dǎo)致這個(gè)slot里面本來(lái)空出來(lái)的資源沒(méi)有被其他subtask使用到(這里假設(shè)一個(gè)slot資源是大于一個(gè)subtask所需要的資源)。
因此,如下圖,Subtask的個(gè)數(shù)(虛線圓角框,13個(gè))多于Slot了(6個(gè)),出現(xiàn)了SlotSharing。一個(gè)Slot中分配了多個(gè)Subtask,特別是最左邊的Slot中跑了一個(gè)完整的Pipeline。
SlotSharing除了提高了資源利用率,還簡(jiǎn)化了并行度和Slot之間的關(guān)系:一個(gè)Job運(yùn)行需要的最少的Slot個(gè)數(shù)就是其中并行度最大的那個(gè)Task(如上圖的source+map組合的task)的并行度(即6),因?yàn)椴⑿卸茸畲蟮膖ask對(duì)應(yīng)的subtask會(huì)有6個(gè),而且這6個(gè)subtask是不能放在同一個(gè)slot里的,所以至少需要6個(gè)slot。
Slot?Sharing?Group(SSG)
為什么又有一個(gè)ssg的概念呢?原因有二。
原因一:在?Flink?中,默認(rèn)情況下,所有的任務(wù)都屬于同一個(gè)默認(rèn)的?Slot?Sharing?Group--default。這意味著所有任務(wù)都會(huì)嘗試占用?TaskManager?上的所有可用?slot。這種方式可以在不需要特別考慮?slot?分配的情況下快速啟動(dòng)應(yīng)用程序,但可能會(huì)導(dǎo)致某些任務(wù)無(wú)法同時(shí)在同一個(gè)?TaskManager?上運(yùn)行,從而影響整個(gè)應(yīng)用程序的性能。
為了優(yōu)化應(yīng)用程序的性能,我們可以通過(guò)設(shè)置不同的?Slot?Sharing?Group?來(lái)控制任務(wù)之間的共享關(guān)系。例如,我們可以將一些任務(wù)分組到同一個(gè)?Slot?Sharing?Group?中,讓它們共享同一個(gè)?TaskManager?上的?slot(CoLocationGroup可以讓指定的多個(gè)task運(yùn)行在同一個(gè)slot里面,比如迭代計(jì)算中)。
原因二:為了防止同一個(gè)?slot?包含太多的?task,或者我們希望把計(jì)算邏輯復(fù)雜的算子單獨(dú)使用?slot?,提高計(jì)算速度。
其實(shí),SSG就是對(duì)?operator?進(jìn)行分組,同一個(gè) group?的不同?operator?task?可以共享同一個(gè)?slot(相同operator?task是不能共享同一個(gè)slot的,因?yàn)樾枰WC資源利用率盡量高)。
要想確定一個(gè)未做SlotSharingGroup設(shè)置的算子的group是什么,可以根據(jù)上游算子的?group?和自身是否設(shè)置?group共同確定(也就是說(shuō)如果下游算子沒(méi)有設(shè)置分組,它繼承上游算子的分組);?
只有屬于同一個(gè)slot共享組的子任務(wù),才會(huì)開(kāi)啟slot共享;不同組之間的任務(wù)是完全隔離的,必須分配到不同的slot上。在這種場(chǎng)景下,總共需要的slot數(shù)量,就是各個(gè)slot共享組最大并行度的總和。例如,如果不設(shè)置SlotSharingGroup,默認(rèn)所有task在同一個(gè)共享組(可以共享所有slot),那么Flink集群需要的任務(wù)槽與作業(yè)中使用的最高并行度正好相同。但是如下圖所示,如果我們強(qiáng)制指定了map的slot共享組為test,那么map和map下游的組為test,map的上游source的共享組為默認(rèn)的default,此時(shí)default組中最大并行度為10,test組中最大并行度為20,那么需要的Slot=10+20=30;
怎么配置SSG
代碼配置
我們可以通過(guò)??slotSharingGroup()?為不同的?operator?設(shè)置不同的group,決定哪些?task?需要被共享:
dataStream.filter(...).slotSharingGroup("groupName");//表示filter的slot共享組為groupName
它是Flink中用來(lái)實(shí)現(xiàn)slot共享的類(lèi),盡可能的允許不同的JobVertices部署在相同的Slot中,但這是一種寬約束,即也可以不在一個(gè)?slot,只是盡量做到,不能完全保證。
還可以通過(guò)?CoLocationGroup?來(lái)決定哪些?task?需要被單獨(dú)的?slot?使用,CoLocationGroup可以強(qiáng)制將subTasksk放到同一個(gè)slot中,是一種硬約束,但是需要注意兩點(diǎn):
- 保證把JobVertices的第n個(gè)運(yùn)行實(shí)例和其他相同組內(nèi)的JobVertices第n個(gè)實(shí)例運(yùn)作在相同的slot中(所有的并行度相同的subTasks運(yùn)行在同一個(gè)slot?);
- 主要用于迭代流(訓(xùn)練機(jī)?學(xué)習(xí)模型)?,用來(lái)保證迭代頭與迭代尾的第i個(gè)subtask能被調(diào)度到同一個(gè)TaskManager上。
頁(yè)面配置
?阿里云中還可以為不同group的slot設(shè)置不同的資源:作業(yè)資源配置 - 實(shí)時(shí)計(jì)算Flink版 - 阿里云
Task Slot與parallelism
slot?是靜態(tài)的概念,是指?taskmanager?具有的并發(fā)執(zhí)行能力。比如說(shuō)一個(gè)task manager中slot為2,表示這個(gè)task manager中并發(fā)執(zhí)行能力是2
parallelism?是動(dòng)態(tài)的概念,是指程序運(yùn)行時(shí)實(shí)際使用的并發(fā)能力
我們?cè)O(shè)置task的并行度不能超過(guò)slot的數(shù)量,比如我們這里slot數(shù)量是9,那么最大的并行度也就是9
例如,在一個(gè)作業(yè)中,我們?cè)O(shè)置defaultParallelism=8,jmMem=3G,tmMem=5G,tmCpu=2,tmSlots=2,那么,他所用的taskmanager只有4個(gè)(因?yàn)椴⑿卸葹?,而每個(gè)taskmanager有兩個(gè)slot即倆個(gè)并發(fā),所以只需要4個(gè)taskmanager),所以總共core需要的是2core*4=8core,taskmanager總共內(nèi)存需要的是4G*4=16G
再次嘗試:把某個(gè)算子的并行度從8改成16后,會(huì)發(fā)現(xiàn)整體資源都上升了,變成了:
總共core需要的是2core*8=8core,taskmanager總共內(nèi)存需要的是4G*8=32G
這是因?yàn)椴⑿卸茸畲蟮膖ask對(duì)應(yīng)的subtask會(huì)有16個(gè),而且這16個(gè)subtask是不能放在同一個(gè)slot里的,所以至少需要16個(gè)slot,也就是說(shuō)是由最大并行度的task來(lái)決定的,此處我們?cè)O(shè)置了一個(gè)task?manager劃分成兩個(gè)slot,所以需要8個(gè)task?manager(如果我們一開(kāi)始只設(shè)置了一個(gè)taskmanger只能有一個(gè)slot,那么就至少要有16個(gè)taskmanager)
一個(gè)分配Slot的例子
Flink在調(diào)度任務(wù)分配Slot的時(shí)候遵循兩個(gè)重要原則:
- 同一個(gè)Job中的同一分組中的不同Task可以共享同一個(gè)Slot;
- Flink是按照拓?fù)漤樞蛞来螐腟ource調(diào)度到sink。
- 假設(shè)有兩個(gè)TM:TM1、TM2,每個(gè)TM有3個(gè)Slot:S1,S2,S3。假設(shè)source/map的并行度為2,keyBy/window/sink的并行度為4,那么調(diào)度的順序依次為source/map[1]?->source/map[2]?->keyBy/window/sink[1]->keyBy/window/sink[2]->keyBy/window/sink[3]->keyBy/window/sink[4]。那么Flink調(diào)度任務(wù)時(shí)(使用默認(rèn)共享分組):
- 首先調(diào)度子任務(wù)source/map[1]到TM1.S1;
- 然后調(diào)度子任務(wù)source/map[2]?,根據(jù)Flink的調(diào)度原則:source/map[1]?和source/map[2]?屬于同一個(gè)Task下的兩個(gè)SubTask,所以他們不能放到同一個(gè)Slot中,所以source/map[2]被調(diào)度到TM1.S2;
- 然后調(diào)度keyBy/window/sink,keyBy/window/sink的子任務(wù)會(huì)被依次調(diào)度到TM1.S1、TM1.S2、TM2.S1、TM2.S2(之所以不分配到TM1.S3,是為了平衡分配到tm1和tm2)。但是如果source/map與keyBy/window/sink屬于不同分組,那么keyBy/window/sink會(huì)被調(diào)度到TM1.S3、TM2.S1、TM2.S2、TM2.S3。
細(xì)粒度資源管理 (Fine-Grained?Resource?Management)
1.14版本推出的高級(jí)功能,用于提高大型共享集群的資源利用率。
為什么需要細(xì)粒度資源管理
Flink?集群執(zhí)行多種多樣的數(shù)據(jù)處理工作負(fù)載。不同的數(shù)據(jù)處理步驟通常需要不同的資源,如計(jì)算資源、內(nèi)存等。例如,大多數(shù)映射函數(shù)都比較輕量,而較大的、保留時(shí)間較長(zhǎng)的窗口函數(shù)往往受益于大量?jī)?nèi)存。默認(rèn)情況下,F(xiàn)link?以粗粒度的?Slot?管理資源,一個(gè)?Slot?代表?TaskManager?的一個(gè)資源切片。tasks?被提前定義部署,通常被分配相同的?slots?而沒(méi)有每個(gè)?slot?包含多少資源的概念。一個(gè)?Slot?可以存放流式處理流程中每個(gè)算子的一個(gè)并發(fā)子任務(wù)實(shí)例,即一個(gè)?Slot?可持有一整條處理流程的并發(fā)子任務(wù)實(shí)例。通過(guò)?Slot?Sharing?Group,用戶(hù)可以影響子任務(wù)在?Slot?上的分布。
對(duì)于許多jobs,使用粗粒度的資源管理并簡(jiǎn)單地把所有的tasks放入一個(gè) Slot?共享組中運(yùn)行,就資源利用率而言,也能運(yùn)行得很好。
- 對(duì)于許多有相同并行度的?tasks?的流作業(yè)而言,每個(gè)?slot?會(huì)包含整個(gè)?pipeline。理想情況條件下,所有的?pipelines?應(yīng)該使用大致相同的資源,這可以容易被滿(mǎn)足通過(guò)調(diào)節(jié)相同?slot?的資源。
- tasks?的資源消耗隨時(shí)間變化不同。當(dāng)一個(gè)?task?的資源消耗減少,其他的資源可以被另外一個(gè)?task?使用,該?task?的消耗增加。這就是被稱(chēng)為“調(diào)峰填谷效應(yīng)”的現(xiàn)象,它降低了所需要的總體需求。
盡管如此,有些情況下使用粗粒度資源管理效果并不好。
- 當(dāng)?Slot?比較小時(shí),為每個(gè)?Slot?專(zhuān)門(mén)申請(qǐng)?TaskManager?的代價(jià)是非常高的(JVM?開(kāi)銷(xiāo)、Flink?框架開(kāi)銷(xiāo)等)。Slot?Sharing?通過(guò)讓不同類(lèi)型的算子共享?Slot,即在輕量的算子(需要較小的?Slot)和重量的算子(需要較大的?Slot)間共享資源,在一定程度上解決了這個(gè)問(wèn)題。然而,這僅在所有算子的并發(fā)度相同時(shí)有較好的效果,并非總是最優(yōu)的。此外,有些算子更適合單獨(dú)運(yùn)行(例如機(jī)器學(xué)習(xí)中負(fù)責(zé)訓(xùn)練的算子需要專(zhuān)用的?GPU資源)。
Kubernetes?和?Yarn?往往需要花費(fèi)一段時(shí)間來(lái)滿(mǎn)足資源請(qǐng)求,特別是在集群負(fù)載較高時(shí)。對(duì)于一些批處理作業(yè),等待資源的時(shí)間會(huì)降低作業(yè)的執(zhí)行效率。
- Tasks?會(huì)有不同的并行度。有時(shí),這種不同的并行度是不可避免的。例如,象?source/sink/lookup?這些類(lèi)別的?tasks?的并行度可能被分區(qū)數(shù)和外部上下游系統(tǒng)的?IO?負(fù)載所限制。在這種情況下,擁有更少的?tasks?的?slots?會(huì)需要更少的資源相比?tasks?的 整個(gè)?pipeline。
- 有時(shí)整個(gè)pipeline 需要的資源可能會(huì)太大以致難于與單一的?slot/TaskManager?的場(chǎng)景相適應(yīng)。在這種情況下,pipeline?需要被分割成多個(gè)?SSGs,它們可能不總是有相同的資源需求。
- 對(duì)于批作業(yè),不是所有的?tasks?能夠在同時(shí)被執(zhí)行。因此,整個(gè)?pipeline?的瞬時(shí)資源需求而時(shí)間變化。
試圖以相同的?slots?執(zhí)行所有的tasks,這樣會(huì)造成非最優(yōu)的資源利用率。相同?slot?的資源能夠滿(mǎn)足最高的資源需求,這對(duì)于其他資源需求將是浪費(fèi)的。當(dāng)涉及到像?GPU?這樣昂貴的外部資源時(shí),這樣的浪費(fèi)將是難以承受的。細(xì)粒度資源管理運(yùn)用不同資源的?slots?提高了資源利用率在種使用場(chǎng)景中。
有了細(xì)粒度資源管理,TaskManager?上的?Slot?可以動(dòng)態(tài)改變大小。轉(zhuǎn)換和算子指定所需的資源配置(CPU、內(nèi)存、磁盤(pán)等),由?Flink?的?ResourceManager?和?TaskManager?負(fù)責(zé)從?TaskManager?的總資源中劃分出指定大小的資源切片。你可以將這看做是?Flink?中的一層最小化、輕量化的資源編排。下圖展示了細(xì)粒度資源管理與目前默認(rèn)的共享固定大小?Slot?資源管理方式的區(qū)別。
工作原理
在一個(gè)?TaskManager?中,執(zhí)行?task?時(shí)使用的資源被分割成許多個(gè)?slots。?Slot?既是資源調(diào)度的基本單元,又是Flink運(yùn)行時(shí)申請(qǐng)資源的基本單元。
對(duì)于細(xì)粒度資源管理,Slot?資源請(qǐng)求包含用戶(hù)指定的特定的資源配置文件。Flink?會(huì)遵從這些用戶(hù)指定的資源請(qǐng)求并從?TaskManager?可用的資源中動(dòng)態(tài)地切分出精確匹配的?slot。
Flink之前的資源申請(qǐng)只包含必須指定的?slots,但沒(méi)有精細(xì)化的資源配置,這是一種粗粒度的資源管理.在這種管理方式下,?TaskManager?以固定相同的?slots?的個(gè)數(shù)的方式來(lái)滿(mǎn)足資源需求,如上圖左側(cè)圖所示。
對(duì)于沒(méi)有指定資源配置的資源請(qǐng)求,F(xiàn)link會(huì)自動(dòng)決定資源配置。
舉一個(gè)細(xì)粒度資源管理的例子:
Flink?會(huì)精確地從?TaskManager?中切分出匹配的?slot?為指定的?slot?資源請(qǐng)求。如上圖第一個(gè)方框所示,TaskManager將以總資源的形式被啟動(dòng),但是沒(méi)有提前指定?slots,所以是free?resource=1core?4GB。
當(dāng)一個(gè)?slot?請(qǐng)求?0.25?Core?和?1GB?的內(nèi)存,F(xiàn)link?將會(huì)選擇一個(gè)有足夠可用資源的?TaskManger?和創(chuàng)建一個(gè)新的已經(jīng)被資源申請(qǐng)的?slot。如果一個(gè)?slot?未被使用,它會(huì)將它的資源返回到?TaskManager?中的可用資源中去。
在當(dāng)前的資源分配策略中,F(xiàn)link?會(huì)遍歷所有被注冊(cè)的?TaskMangers?并選擇第一個(gè)有充足資源的?TaskManager?來(lái)滿(mǎn)足?Slot?資源請(qǐng)求。當(dāng)沒(méi)有?TaskManager?有足夠的資源時(shí),F(xiàn)link將會(huì)從 Native?Kubernetes或者 YARN分配一個(gè)新的?TaskManager(在當(dāng)前的策略中,F(xiàn)link?會(huì)根據(jù)?用戶(hù)配置分配相同規(guī)格的TaskManagers,因?yàn)?TaskManagers?的規(guī)格組合是預(yù)定義的。)
- 集群中可能會(huì)存在資源碎片。例如,兩個(gè)?slots?請(qǐng)求?3GB?堆內(nèi)存,然而?TaskManager?總共的堆內(nèi)存是?4GB,F(xiàn)link?會(huì)啟動(dòng)兩個(gè)?TaskManagers,每個(gè)?TaskManager?會(huì)有1G的堆內(nèi)存被浪費(fèi)。未來(lái),可能會(huì)有一種資源分配策略,可以根據(jù)?job?的?slot?請(qǐng)求分配異構(gòu)?TaskManagers(即配置不同的tm),從而緩解資源碎片。
- 確保配置的?Slot?共享組的資源組成不能大于?TaskManager?的總資源。否則,job?會(huì)失敗,并拋出異常。
犧牲資源隔離來(lái)降低整體內(nèi)存消耗
Flink?1.17?版本還提供了參數(shù)擴(kuò)大?TaskManager?的?slot?之間共享內(nèi)存的范圍,這種方式可以在?TaskManager?中?slot?內(nèi)存使用不均勻時(shí)提高內(nèi)存效率?;诖嗽谡{(diào)整參數(shù)后可以以資源隔離為代價(jià)來(lái)降低整體內(nèi)存消耗。
請(qǐng)參考 了解更多相關(guān)信息。這個(gè)參數(shù)的作用:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-838433.html
每個(gè)任務(wù)管理器的所有?RocksDB?實(shí)例之間共享的固定內(nèi)存總量(集群級(jí)選項(xiàng))。僅當(dāng)未配置?'state.backend.rocksdb.memory.management'?和?'state.backend.rocksdb.memory.fixed-per-slot'?時(shí),此選項(xiàng)才會(huì)生效。默認(rèn)值為空(不配置),值是內(nèi)存值。如果沒(méi)有配置,那么每個(gè)?RocksDB?列族狀態(tài)都有自己的內(nèi)存緩存(由列族選項(xiàng)控制)。共享資源的相關(guān)選項(xiàng)(例如?write-buffer-ratio)可以在同一級(jí)別設(shè)置(flink-conf.yaml)。注意,此功能打破了插槽之間的資源隔離文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-838433.html
到了這里,關(guān)于(增加細(xì)粒度資源管理)深入理解flink的task slot相關(guān)概念的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!