背景
flink內(nèi)部實(shí)現(xiàn)了一個(gè)類似于tcp滑動(dòng)窗口概念的流量控制功能,以滿足其內(nèi)部的流量控制功能,本文就來講解下flink實(shí)現(xiàn)的基于信用值的流量控制的原理文章來源:http://www.zghlxwxcb.cn/news/detail-548666.html
實(shí)現(xiàn)原理
首先,我們先來看一下在flink中是如何實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)模?img src="https://imgs.yssmx.com/Uploads/2023/07/548666-1.png" alt="Flink基于信用值的流量控制,flink,flink,大數(shù)據(jù)" referrerpolicy="no-referrer" />
從上圖可知,發(fā)送端的taskmanager會(huì)為每個(gè)下游的算子的任務(wù)都創(chuàng)建一個(gè)發(fā)送緩沖區(qū),并且下游算子的每個(gè)任務(wù)所在的taskManager也會(huì)為每個(gè)發(fā)送端創(chuàng)建一個(gè)接受緩沖區(qū),這樣數(shù)據(jù)傳輸時(shí)首先會(huì)先放著發(fā)送緩沖區(qū)中然后才發(fā)送到下游算子任務(wù)的接收緩沖區(qū)中的.
那問題就來了,當(dāng)下游算子任務(wù)的處理速度跟不上的時(shí)候怎么辦呢?Flink采取的方法是下游算子接收端會(huì)為每個(gè)上游的算子任務(wù)計(jì)算一個(gè)信用值,說白了就是一個(gè)可以發(fā)送的字節(jié)的數(shù)量,上游算子任務(wù)也就是發(fā)送方會(huì)盡快發(fā)送信用值許可的數(shù)據(jù)量,并且會(huì)把積壓量(已經(jīng)在發(fā)送緩沖區(qū)中準(zhǔn)備好但是由于沒有信用值導(dǎo)致沒法發(fā)送)的數(shù)據(jù)大小告訴下游接收端任務(wù),下游接收端任務(wù)接收發(fā)送端發(fā)來的數(shù)據(jù)后,還會(huì)根據(jù)每個(gè)發(fā)送端算子任務(wù)的堆積量計(jì)算下一輪發(fā)送端算子任務(wù)的信用值
可以看出,發(fā)送端算子任務(wù)的信用值是接收方根據(jù)各個(gè)發(fā)送方的數(shù)據(jù)積壓的量計(jì)算出來的,所以當(dāng)上游發(fā)送方任務(wù)有數(shù)據(jù)傾斜的問題時(shí),下游接收方會(huì)給與數(shù)據(jù)傾斜嚴(yán)重的對(duì)應(yīng)發(fā)送方任務(wù)更多的信用值,這樣就可以緩解數(shù)據(jù)傾斜的問題了.文章來源地址http://www.zghlxwxcb.cn/news/detail-548666.html
到了這里,關(guān)于Flink基于信用值的流量控制的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!