从0到1Flink的成长之路- Flink 原理探析接着干
Posted 熊老二-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从0到1Flink的成长之路- Flink 原理探析接着干相关的知识,希望对你有一定的参考价值。
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图如下:
以上是关于从0到1Flink的成长之路- Flink 原理探析接着干的主要内容,如果未能解决你的问题,请参考以下文章
从0到1Flink的成长之路- Flink 原理探析接着干干
从0到1Flink的成长之路- Flink 原理探析接着干干
从0到1Flink的成长之路- Flink 原理探析接着干干干