flink实战-基本概念

  1. 基本概念
    在这里插入图片描述

flink程序执行时包含两个主要的进程,master和worker。主要分为:Job Client 、JobManager、TaskManager.

job manager

master进程是job manager,协调和管理着程序的执行,主要职责:调度任务、管理checkpoints、故障恢复等

job manager包含如下组件:

  • Actor system

  • Scheduler

  • Check pointing

scheduler

flink的执行者叫做 task slots,每个taskmanger需要管理一个或者多个 task slots

Check pointing

check pointing 是flink实现一致性容错方案的支撑。它维持了分发的数据流和执行者状态的一致性快照。在出错的时,flink停止执行者、重置它们并且从最新可用的checkpoint开始执行。

stream barriers 是flink快照的核心元素:
在这里插入图片描述

Task Manager

task manager是工作节点(worker nodes),负责任务在JVM中的一个或者多个线程下执行。任务执行的并行度(parallelism)由每个task manager中可用的task slots决定。每个任务代表了分配给task slot的一系列的资源。例如一个task manager有四个slots,,然后它将分配给每个task slot 25%的内存。一个task slot里可能会有一个或者多个线程运行。在相同slot里的线程分享相同的虚拟机。在相同jvm里的tasks分享了tcp 连接和心跳信息:
在这里插入图片描述

job client

job client 不是flink程序内部的部分,但是是执行的开始节点,job client职责是从用户那里接受程序,然后创建一个数据流,把数据流提交给job manager 以备将来执行,一旦任务执行完成,jobclient 提供一个结果给用户。

例如下边编写一个简单的word count 程序:

val text = enc.readTextFile("input.txt"); //source
val count = text.flatMap(_.toLowerCase.split("\\W+") filter (_.nonEmpty).map{(_,1)}
            .groupBy(0)
             .sum(1)          //Transformation
  
  counts.writeAsCsv("output.txt","\n"," ")  //Sink
               

如果一个客户端接受了用户提交的程序,他将转换成一个data flow,data flow 看起来如下:
在这里插入图片描述
Flink数据流默认是并行分布的。 对于并行数据处理,Flink分割运算符和流。 操作员分区被称为子任务。 流可以以一对一或重新分布的方式分发数据。

数据直接从源流向map运算符,因为不需要混洗数据。 但是对于GroupBy操作,Flink可能需要通过keys重新分配数据才能获得正确的结果:
在这里插入图片描述
以上基本展示了flink的基本架构和执行模块儿。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章