前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flink完美的反压机制

Flink完美的反压机制

作者头像
shengjk1
发布2019-08-29 11:25:17
1.4K0
发布2019-08-29 11:25:17
举报
文章被收录于专栏:码字搬砖码字搬砖

整体上来说的话,Flink 内部是基于 producer-consumer 模型来进行消息传递的,也正是 producer-consumer 模型的存在,Flink 能够实现完美的反压。要想更好的理解为什么 Flink 可以完美的实现反压,我们首先需要明白 Flink内部的 producer-consumer 模型,理解了模型,自然也就懂了反压。 我会用几张图来展示 Flink的 producer-consumer 模型。 我们以 WC 为例,这里盗用一下别人的图片,感谢,笔芯!

123.png
123.png

我们可以看到从 ExecutionGraph 转化为物理执行图时,IntermediateResult 和 IntermediateResultPartition 分别转化为 ResultPartition 和 ResultSubPartition ,而 ExecutionEdge 转化为 InputGate 和 InputChannel。至此转化完毕,这些也就是我们今天要讨论的主角。再继续讲解主角之前呢,不知道大家对 task 是怎么运行的还有没有印象(没有的同学可以回顾之前的博客 Flink Job是如何被执行的(后续写了再更新链接地址) ),我们曾经提到过,在 Task 的构造器中构建了 ResultPartition 和 InputGate 以及

代码语言:javascript
复制
network.registerTask(this);

此方法会为每一个 Task 的每一个 ResultPartition 申请一个 BufferPool,同时为每一个 Task 的每个 InputGate 申请一个 BufferPool。

代码语言:javascript
复制
@VisibleForTesting
	public void setupPartition(ResultPartition partition) throws IOException {
		BufferPool bufferPool = null;
		try {
			...
			partition.registerBufferPool(bufferPool);
			...
		} catch (Throwable t) {
			...
		}
...
	}
代码语言:javascript
复制
@VisibleForTesting
	public void setupInputGate(SingleInputGate gate) throws IOException {
		BufferPool bufferPool = null;
		int maxNumberOfMemorySegments;
		try {
			...
			gate.setBufferPool(bufferPool);
		} catch (Throwable t) {
		...
		}
	}

ResultPartition、ResultSubPartition以及 InputGate、InputChannel究竟都是什么鬼呢?不急,看我信手拈来

在这里插入图片描述
在这里插入图片描述

试想一下,水流正酣,如果此时将下游 1 号和 2 号水龙头关闭,会发生什么情况,首先被添满的肯定是抽水机 1 号 和 2 号,因为抽水机只进不出,抽水机满了,封闭木桶就不出水了,慢慢的封闭木桶也满了,最后,直接作用于上游水龙头,由物理定律可知,当上游水龙头的水压与木桶对上游水龙头的反压一样时,上游水龙头也就不再放水了。 不过抽水机怎么知道,抽哪个桶的水呢?没错,就是通过管道知道的。 为了更好的理解反压,我们可以上游水龙头类比于图123中的 source,封闭木桶类比于 ResultPartition,封闭木桶 1 号和 2 号 类比于 ResultSubPartition,管道 1 号 和 2 号就可以类比 channel ,而 抽水机 就可以类比inputGates,而 下游水龙头当然就类比于 Keyed Aggregation—>sink。 当下游算子消费比上游算子产生的快时,慢慢的 inputGate‘s buffer 就会满了,然后该ResultSubPartition的 buffer 满了,依次往上推,最后形成反压效果,致使上游算子减慢生产的速度,从而慢慢达到平衡状态

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年08月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档