文章目录
- Flink架构介绍
- 基本架构
- 安装部署
- 文件准备及部署规划
- 上传文件到服务器并解压
- 修改配置文件
- 分发安装文件到其他服务器
- 启动集群
- 访问webUI
- 上传任务到集群
- 开发实例程序WordCount
- 通过命令上传任务到Flink集群
- 通过webUI上传任务到Flink集群
Flink架构介绍
Flink 的安装和部署主要分为本地(单机)模式和集群模式,其中本地模式只需直接解压就可以使用,不以修改任何参数,一般在做一些简单测试的时候使用。本地模式在我们的课程里面不再赘述。集群模式包含:
Standalone。
Flink on Yarn。
Mesos。
Docker。
Kubernetes。
AWS。
Goole Compute Engine。
这里先部署Standalone 模式集群
基本架构
Flink 整个系统主要由两个组件组成,分别为 JobManager 和 TaskManager,Flink 架构也遵循 Master-Slave 架构设计原则,JobManager 为 Master 节点,TaskManager 为 Worker(Slave)节点。所有组件之间的通信都是借助于 Akka Framework,包括任务的状态以及Checkpoint 触发等信息,架构图如下:
客户端
客户端负责将任务提交到集群,与 JobManager 构建 Akka 连接,然后将任务提交到JobManager,通过和 JobManager 之间进行交互获取任务执行状态。客户端提交任务可以采用 CLI 方式或者通过使用 Flink WebUI 提交,也可以在应用程序中指定 JobManager 的 RPC网络端口构建 ExecutionEnvironment 提交 Flink 应用
JobManager
JobManager 负责整个 Flink 集群任务的调度以及资源的管理,从客户端中获取提交的应用,然后根据集群中 TaskManager 上 TaskSlot 的使用情况,为提交的应用分配TaskSlots 资源并命令 TaskManger 启动应用。JobManager 相当于整个集群的 Master 节点,且整个集群中有且仅有一个活跃的 JobManager,负责整个集群的任务管理和资源管理。
JobManager 和 TaskManager 之间通过 Actor System 进行通信,获取任务执行的情况并通过 Actor System 将执行情况发送给客户端。同时在任务执行过程中,Flink JobManager 会触发 Checkpoints 操作,每个 TaskManager 节点收到 Checkpoint触发指令后,完成 Checkpoint 操作,所有的 checkpoint 协调过程都是在 Flink JobManager中完成。当任务完成后,Flink 会将任务执行的信息反馈给客户端,并且释放掉 TaskManager中的资源以供下一次提交任务使用
TaskManager
TaskManager 相当于整个集群的 Slave 节点,负责具体的任务执行和对应任务在每个节点上的资源申请与管理。客户端通过将编写好的 Flink 应用编译打包,提交到 JobManager,然后 JobManager 会根据已注册 TaskManager 的资源情况,将任务分配给有资源的 TaskManager 节点,然后启动并运行任务。TaskManager 从 JobManager 接收需要部署的任务,然后使用 Slot 资源启动 Task,建立数据接入的网络连接,接收数据并开始数处理。同时 TaskManager 之间的数据交互都是通过数据流的方式进行的。
Flink 的任务运行其实是采用多线程的方式,这和 MapReduce 多 JVM 进程的方式有很大的区别 Fink 能够极大提高 CPU 使用效率,在多个任务和 Task 之间通过 TaskSlot方式共享系统资源,每个 TaskManager 中通过管理多个 TaskSlot 资源池进行对资源进行有效管理
安装部署
文件准备及部署规划
我们准备三台服务器 server01、server02、server03
server01作为 jobManager(master) server01、server02、server03 作为TaskManager(slave) server01既作为master又作为一个slave 下载安装文件 flink-1.9.1-bin-scala_2.12.tgz,
上传文件到服务器并解压
将文件flink-1.9.1-bin-scala_2.12.tgz 上传到server01服务器 /opt/apps目录
并解压如下:
修改配置文件
进入flink 下 conf 目录 修改配置文件 flink-conf.yaml ,修改如下两项
修改 slaves 文件内容如下:
分发安装文件到其他服务器
将修改后的flink目录复制到 server02 和 server03 两台服务器,命令如下:
启动集群
执行bin下的 start-cluster.sh 命令启动集群如下:
访问webUI
启动成功后访问 http://server01:8081 可以访问到flinkwebUI如下:
上传任务到集群
开发实例程序WordCount
代码如下
通过命令上传任务到Flink集群
将程序jar包上传到server01位置如下:
执行命令 上传任务
由于程序中需要连接server01 的 8888端口,因此要先通过如下命令 开启数据发送程序,否则任务会由于连接失败而导致启动失败
server01上执行如下命令(如果提示命令不存在 执行 yum install -y nc 进行安装):
上传程序包到flink引擎
通过在终端中发送字符串给处理程序,可以在webUI中看到任务的执行情况
通过webUI上传任务到Flink集群
也可以通过webUI界面上传任务程序