1

1、Flink分布式运行架构

image.png
执行原理:

  1. Client提交作业,相当于Spark的Driver
  2. ActorSystem相当于Hadoop RPC,是用来进行节点之间通信的
  3. Client的程序DataFlow相当于是StreamGraph,然后经过优化成JobGraph
  4. 由ActorSystem把JobGraph提交到JobManager节点
  5. JobManager对JobGraph引入并行度形成ExecutionGraph
  6. 然后由TaskScheduler进行task之间的任务调度, 将task分配到TaskSlot里面运行,底层也是基于 ActorSystem进行交互
  7. TaskManager会返回task运行的状态信息给 JobManager,JobManager会将task运行的状态信息返回给客户端
  8. 在⻚面上可以看到任务的执行情况,是由 TaskManager返回给JobManager,然后 JobManager返回给客户端的

2、数据传输的策略

随机分区(shuffle)

  • 最简单的重分区方式就是直接“洗牌”。通过调用DataStream的.shuffle()方法,将数据随机地分配到下游算子的并行任务中去

轮询分区(REBALANCE)

  • 通过调用DataStream的.rebalance()方法,就可以实现轮询重分区。rebalance使用的是Round-Robin负载均衡算法,可以将输入流数据平均分配到下游的并行任务中去

重缩放分区(rescale)

  • 重缩放分区其实和轮询分区非常相似。不同点是轮询分区是针对所有分区进行轮询,重缩放分区只对指定分区内部进行轮询。如下图所示,source并行度为2,下游flatMap并行度为4:
    image.png
    其实就是分成了小组,在组内进行REBALANCE。通过调用DataStream的.rebalance()

广播(broadcast)

  • 简单说就是一份数据分发到下游所有的Task中。可以通过调用DataStream的broadcast()方法,将输入数据复制并发送到下游算子的所有并行任务中去

全局分区(global)

  • 全局分区也是一种特殊的分区方式。这种做法非常极端,通过调用.global()方法,会将所有的输入流数据都发送到下游算子的第一个并行子任务中去。这就相当于强行让下游任务并行度变成了1

自定义分区(Custom)

  • 当Flink提供的所有分区策略都不能满足用户的需求时,我们可以通过使用partitionCustom()方法来自定义分区策略。
    在调用时,方法需要传入两个参数,
    第一个是自定义分区器(Partitioner)对象,
    第二个是应用分区器的字段,
    它的指定方式与keyBy指定key基本一样:可以通过字段名称指定,也可以通过字段位置索引来指定,还可以实现一个KeySelector

HASH

  • 对数据流进行keyBy/window、keyBy/reduce操作

3、Task并行度和Slot的关系

如果task的任务数量也就是并行度大于slot那么程序会无法运行

  1. 一个TaksManager里面默认只有一个slot
  2. 在task运行的过程中会进行算子合并,会产生operatorChain的情况,比如说KeyBy->Map

Operator Chain的条件 :

  1. 数据传输策略是 forward strategy
  2. 在同一个 TaskManager 中运行
  3. TaskManager会尽量保证task在同一个JVM里面运行,有利于提升效率

如下图,设置Source并行度为3,faltMap并行度为2,keyBy->sum->map并行度为2,Sink并行度为1,一共8个Task
image.png

如果全局并行度设置为1呢?

  • source -> flatmap 属于 operator Chain的情况,会将 souce->flatMap进行合并为一个task
  • keyby sum -> map -> sink也是属于 oprator chain的情况,会将 keyby sum -> map -> sink进行合并为一个task
  • 上游task -> 下游task 因为中间有 keyby所以数据传输的策略是 keybased strategy,也就是HASH
    所以上述2个Task
    image.png
    image.png

4、Flink四层图结构

  • Flink程序从提交到运行,需要经历如下4个阶段 :

    1. Stream Graph
    2. Job Graph
    3. Execution Graph
    4. Physical Execution Graph
  • Stream Graph和Job Graph是在客户端阶段完成的,然后client通过ActorSystem把JobGraph提交到JobManager
  • Execution Graph阶段会引入并行度
  • Physical Execution Graph 进一步确定了数据存放的位置和收发的具体方式
    image.png
    image.png

如感兴趣,点赞加关注,谢谢


journey
32 声望22 粉丝

下一篇 »
大话网络通信