从0到1Flink的成长之路- Flink 原理探析接着干

本文详细介绍了Flink的数据传输模式,包括一对一和重分配,并探讨了Task和Operator Chain的概念及其优化效果,强调了相同并行度和One-to-One模式对于Chain操作的重要性。此外,还展示了如何通过API控制Chain的行为,包括禁止和开启新的Chain。
摘要由CSDN通过智能技术生成

Transport Pattern
Stream(流)可以在2个Operator之间传输数据,有两种不同Parttern(模式)传输:

One-to-One streams:一对一,前一个Operator中一个SubTask将数据传输给后一个
Operator中1个SubTask。类似Spark RDD中窄依赖,父RDD1个分区数据给子RDD1个分区。
在这里插入图片描述
Redistributing streams:重分配,前一个Operator中一个SubTask将数据给后一个Operator
中多个SubTask。类似Spark RDD中宽依赖,父RDD一个分区数据给子RDD多个分区。
在这里插入图片描述
如下图所示,按照某字段进行分组时,前一个Operator与后一个Operator之间数据传输模式
就是Distributing重分配,往往keyBy分组后需要聚合操作,产生KeyedState。
在这里插入图片描述
Task、Operator Chain
在Flink Job作业执行时,每个Operator就是一个Task任务,每个并行度对应Operator就是一
个SubTask子任务,运行在一个线程Thread中。
在这里插入图片描述
由于Flink计算分析引擎是分布式执行(distributed execution),为了更好提升性能,Flink引擎
会将2个 Operator SubTask子任务进行连接Chain操作,放在一个SubTask子任务中执行,这种操
作称为Operator Chains,有如下两个好处:

减少线程到线程的切换和缓冲的开销(reduces the overhead of thread-to-thread handover
and buffering);
增加总体吞吐量,同时减少延迟( increases overall throughput whiledecreasing latency);

Flink引擎底层Chain连接2个Operator SubTask到一个SubTask,满足如何两个条件:

第一个条件:相邻2个Operator并行度(parallelism)相同;
第二个条件:相邻2个Operator之间数据传递方式为One-to-One 模式;

针对上述Flink Job中Operator的并行度和数据传递模式,构建如下流程图:
在这里插入图片描述
此外,Flink提供API,允许用户在程序中启动新的Chain链和禁止产生链Chain,API说明如下:
在这里插入图片描述
以上述程序为例,核心代码如下:
在这里插入图片描述
DataFlow Graph图如下:
在这里插入图片描述
调用【disableChaining】方法,禁止进行Operator Chain操作,核心代码如下:
在这里插入图片描述
DataFlow Graph图如下:
在这里插入图片描述
调用【startNewChain】方法,开启新的Operator Chain操作,核心代码如下:
在这里插入图片描述
DataFlow Graph图如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值