分享

Flink从思想到实现,从实现到细节2

本帖最后由 pig2 于 2020-3-22 20:40 编辑

问题导读

1.Flink实现你认为需要实现哪些内容?
2.Flink组成你认为包含那些内容?
3.本文认为Flink包含那些内容?

上一篇:
Flink从思想到实现,从实现到细节1
https://www.aboutyun.com/forum.php?mod=viewthread&tid=28500

2.Flink实现
这里给大家讲讲Flink实现,Flink的思想我们知道了,可是思想是虚无缥缈的,只有实现,看到它的骨架,看到的它的使用,才能让他为我们服务,被我们所用。那么Flink是如何实现的。假如我们要设计一个组件,我们该如何设计。
(1)讲到设计,首先要明确它的组成,它的成份之间的关系,也就是原理。所以我们首先需要明白Flink组成及原理
(2)我们设计好后,得有具体实现吧,所以我们需要了解Flink API,各种算子等
(3)Flink的目的始终是为我们服务的,因此我们需要将所学Flink知识应用于实践,因此我们需要了解Flink的一些应用
(4)其实还有个问题,那就是Flink思想的实现,其实还是以代码的方式实现的,因此我们需要研究下Flink的源码。

我们从以上四个角度来研究Flink的实现。
(1)Flink组成及原理
Flink组成
对于Flink组成,我们可以想到哪些内容,很多老铁在面试的时候,或则在学习的时候,并不能全面回答问题。对于Flink组成,是可以分类的。
  • 从程序设计角度可以分为计算框架组成
  • 从运行角度可以分为运行框架组成

(1)计算框架组成
计算框架,到底是什么样子的,这时候我们思考,如果我们设计一个Flink计算框架,我们该如何设计,我们会有底层公共的API吗?会有流、批处理API吗?流批处理API,是否有对应的SQL,当前机器学习非常流行,我们是否可以有机器学习API那?对的,这些都是我们在设计的时候需要考虑的问题。而上面我们所考虑的问题,Flink计算框架都给出了答案。我们来看下图
1.png

我们可以看到Datastream和DataSet API是基于RunTime,RunTime是Flink core层,Datastream和DataSet是API层,CEP、Table、Flink ML、Graph属于库层。其实我们前面所以思考的内容,对于Flink其实都有对应的实现。【同样由于About云传播活到老、学到老的学习精神,希望我们能会学习、提高学习效率,如果你在这方面有所心得或则想学习,欢迎加微信w3aboutyun,加入About云爱好者群,共同探讨学习和技术】

对于各个层,想了解更加详细,我们可以看下图

1.png


关于更多框架信息可参考
https://www.aboutyun.com/forum.php?mod=viewthread&tid=26343


(2)运行框架组成
Flink运行由两个部分组成,分别是JobManager和TaskManager,Flink架构也遵行Master-Slave架构设计原则,JobManager是Master节点,TaskManager是Worker(Slave)节点。
基本框架组
2.png


Flink原理
对于计算框架,如果我们想了解原理,那么我只能研究Flink源码,关于源码我们将会在后面进一步的补充,这里说下Flink运行框架原理。

1.png

Flink系统由两个部分组成,分别是JobManager和TaskManager,Flink架构也遵行Master-Slave架构设计原则,JobManager是Master节点,TaskManager是Worker(Slave)节点。所有组件之间需要借助Akka Framework 来通讯,包括任务的状态和checkpoint触发等信息。

(1)client 客户端
客户端负责将任务提交到集群,与Jobmanager构建Akka连接,然后将任务提交到jobmanager,通过jobmanager之间进行交互获取任务执行状态。客户端提交任务可以cli方式或者通过使用Flink WebUI 提交。

(2)Jobmanager
jobmanager 负责整个Flink集群任务的调度以及资源的管理,从客户端获取提交的任务,然后根据集群中Taskmanager 上TaskSlot的使用情况,为提交的应用分配相应的TaskSlot资源并命令Taskmanager 启动从客户端中获取的应用。Jobmanager 是集群中的Master节点,整个集群有且仅有一个active的jobmanager,负责整个集群的任务管理和资源管理。Jobmanager和TaskManager之间通过Actor System 进行通信,获取任务的执行情况并通过Actor System 将应用的任务的执行情况发送到客户端。同时在任务的执行过程中,Flink Jobmanager 会触发Checkpoints 操作,每个taskmanager 节点接受的到checkpoints触发命令后,完成checkpoints操作,所有的checkpoint协调过程都是在Flink Jobmanager中完成。当任务完成后,jobmanager会将任务执行信息返回到客户端,并释放掉taskmanager中的资源以供下一次任务使用。

(3)Taskmanager
Taskmanager 相当于整个集群的slave 节点,负责具体的任务执行和对应任务在每个节点上的资源申请与管理。客户端通过将编写好的flink应用编译打包,提交到jobmanager,然后jobmanager会根据已经注册在jobmanger中taskmanager的资源情况,将任务分配到有资源的taskmanager节点,然后启动并运行任务。Taskmanager从jobmanager那接受需要部署的任务,然后使用slot资源启动task,建立数据接入网络连接,接受数据并处理。同时Taskmanager之间的数据交互都是通过数据流的方式进行的。

flink的任务运行其实是采用多线程的方式,能够极大的提高cpu使用效率,在多个任务之间通过taskslot方式共享系统资源,每个taskmanager对多个taskslot资源池进行管理。
如想学习,欢迎探讨交流【w3aboutyun】

扫码:

----------------------------------------------------
未完待续



3.Flink细节




本帖被以下淘专辑推荐:

已有(1)人评论

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条