千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  应聘面试  >  大数据面试题  > Flink反压机制?

Flink反压机制?

来源:千锋教育
发布人:wjy
时间: 2022-09-02 16:59:16 1662109156

Flink 内部是基于producer-consumer模型来进行消息传递的,Flink的反压设计也是基于这个模型。

Flink 使用了高效有界的分布式阻塞队列,就像 Java 通用的阻塞队列(BlockingQueue)一样。

下游消费者消费变慢,上游就会受到阻塞。

Flink反压机制?

- Flink 1.5 之前的版本并没有对反压做特别的处理,它利用buffer来暂存堆积的无法处理的数据,当 buffer 用满了,则上游的流阻塞,不再发送数据。可见此时的反压是从下游往上游传播的,一直往上传播到 Source Task 后,Source Task最终会降低或提升从外部Source 端读取数据的速率。

这种机制有一个比较大的问题,在这样的一个场景下:同一 Task的不同 SubTask 被安排到同一个 TaskManager,则SubTask与其他TaskManager 的网络连接将被多路复用并共享一个 TCP信道以减少资源使用,所以某个 SubTask产生了反压的话会把多路复用的TCP通道占住,从而会把其他复用同一 TCP信道的且没有流量压力的SubTask阻塞。

- Flink1.5版本之后的基于Credit反压机制解决了上述问题。

这种机制主要是每次上游SubTask给下游SubTask发送数据时,会把Buffer中的数据和上游ResultSubPartition堆积的数据量Backlog size发给下游,下游会接收上游发来的数据,并向上游反馈目前下游现在的Credit值,Credit值表示目前下游可以接收上游的Buffer量,1个Buffer等价于1个Credit。

可见,这种策略上游向下游发送数据是按需发送的,而不是和之前一样会在公用的Netty和TCP这一层数据堆积,避免了影响其他SubTask通信的问题。

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT