Flink基于信用值的流量控制

背景

flink内部实现了一个类似于tcp滑动窗口概念的流量控制功能,以满足其内部的流量控制功能,本文就来讲解下flink实现的基于信用值的流量控制的原理

实现原理

首先,我们先来看一下在flink中是如何实现数据传输的,Flink基于信用值的流量控制_第1张图片
从上图可知,发送端的taskmanager会为每个下游的算子的任务都创建一个发送缓冲区,并且下游算子的每个任务所在的taskManager也会为每个发送端创建一个接受缓冲区,这样数据传输时首先会先放着发送缓冲区中然后才发送到下游算子任务的接收缓冲区中的.
那问题就来了,当下游算子任务的处理速度跟不上的时候怎么办呢?Flink采取的方法是下游算子接收端会为每个上游的算子任务计算一个信用值,说白了就是一个可以发送的字节的数量,上游算子任务也就是发送方会尽快发送信用值许可的数据量,并且会把积压量(已经在发送缓冲区中准备好但是由于没有信用值导致没法发送)的数据大小告诉下游接收端任务,下游接收端任务接收发送端发来的数据后,还会根据每个发送端算子任务的堆积量计算下一轮发送端算子任务的信用值
可以看出,发送端算子任务的信用值是接收方根据各个发送方的数据积压的量计算出来的,所以当上游发送方任务有数据倾斜的问题时,下游接收方会给与数据倾斜严重的对应发送方任务更多的信用值,这样就可以缓解数据倾斜的问题了.

你可能感兴趣的:(flink,flink,大数据)