通过安装包方式部署
下载地址
https://archive.apache.org/dist/flink/flink-1.7.2/flink-1.7.2-bin-hadoop27-scala_2.11.tgz
下载之后 解压
启动flink
访问flink web ui
http://localhost:8081
运行flink demo程序
- 启动7777端口服务
nc -lk 7777
- 运行flink wordcount streamjar包传入 7777端口
bin/flink run examples/streaming/SocketWindowWordCount.jar --port 7777
- 通过web ui查看启动情况
可以看到该任务进行运行
- 在7777的服务里面输入内容
- 查看日志
tail -f flink*.out
- 关闭7777服务
可以看到该任务已经结束了
总结以上流程
任务执行细节详见
流处理开源框架Flink原理简介和使用
简单使用了flink之后,接下来咱刨析下flink运行的原理
原理介绍
Flink运行组件
Flink是通过Java和Scala实现的 所以所有组件都运行在Java虚拟机上
- 作业管理器(JobManager)
- 控制一个应用程序执行的主进程 每个应用程序都会被一个不同的JobManager所控制执行
- JobManager会先接受到要执行的应用程序 这个应用程序会包括作业图(JobGraph)、逻辑数据流图(logical dataflow graph)和打包了所有类、库和其他资源的jar包
- JobManager会把JobGraph转换成一个物理层面的数据流图 这个图叫做执行图(ExecutionGraph) 包含了所有可以并发执行的任务
- JobManager 会向资源器 (ResourceManager)请求执行任务必要的资源 也就是任务管理器(TaskManager)上的插槽(slot) 一旦它获取到了足够的资源 就会将执行图分发到真正运行它们的TaskManager上。而在执行的过程中 JobManager会负责所有需要中央协调的操作 比如检查点(CheckPoints)的协调
- 任务管理器(TaskManager)
Flink中的工作进程 通过在Flink中会有多个TaskManager运行 每一个TaskManager会包含一定数量的slot插槽。插槽的数量限制了TaskManager能够执行的任务数量
在执行过程中 一个TaskManager可以和其他运行在同一应用程序的TaskManager交换数据
资源管理器(ResouceManager)
主要负责管理任务管理器(TaskManager)的插槽(slot) TaskManager插槽是Flink中定义的处理资源单元
Flink为不同的环境和不同的资源管理工具提供了不同的资源管理器 比如 Yarn、Mesos、K8s、standalone部署
当JobManager申请插槽资源时 ResourceManager会将有空闲插槽的TaskManager分配给JobManager 如果ResourceManager没有足够的插槽来满足JobManager请求 还可以向资源提供平台发起会话 以提供启动TaskManager进程的容器 。ResourceManager还负责终止空闲的TaskManager 释放计算资源
分发器(Dispatcher)
可以跨作业运行 它为应用提交提供了Rest接口
当一个任务被提交时 分发器就会启动并将应用移交给一个JobManager
Dispatcher也会启动一个Web UI 用来方便展示和监控作业执行信息
Dispatcher在架构中可能不是必须的 取决于应用提交运行的方式
任务提交流程
如果部署的集群环境不同(例如 YARN,Mesos,Kubernetes,standalone 等),其中一些步骤可以被省略,或是有些组件会运行在同一个 JVM 进程中
- 将 Flink 集群部署到 YARN
- Flink 任务提交后
- Client 向 HDFS 上传 Flink 的 Jar 包和配置
- 之后向 Yarn ResourceManager 提交任务
- ResourceManager 分配 Container 资源并通知对应的 NodeManager 启动 ApplicationMaster
- ApplicationMaster 启动后加载 Flink 的 Jar 包和配置构建环境
- 然后启动 JobManager
- 之后 ApplicationMaster 向 ResourceManager 申 请 资 源 启 动 TaskManager
- ResourceManager 分 配 Container 资 源 后
- 由 ApplicationMaster 通 知 资 源 所 在 节 点 的 NodeManager 启 动 TaskManager
- NodeManager 加载 Flink 的 Jar 包和配置构建环境并启动 TaskManager
- TaskManager 启动后向 JobManager 发送心跳包,并等待 JobManager 向其分配任务