Flink 原理与实现:架构和拓扑概览

  • 时间:
  • 浏览:7

JobGraph:StreamGraph经过优化后生成了 JobGraph,提交给 JobManager 的数据形态学 。

本文所示例子为 flink-1.0.x 版本

这里对你这个 名词进行简单的解释。

首先,使用 netcat 启动本地服务器:

在netcat端输入单词并监控 taskmanager 的输出都能不能想看 单词统计的结果。

但会 提交 Flink 线程

都能不能想看 Flink 的任务调度是线程模型,但会 不同Job/Task混合在有一个 TaskManager 线程中。其实你这个 方法能算是 效提高 CPU 利用率,但会 你这个 人不太喜欢你这个 设计,但会 不仅不足资源隔离机制,一并随后方便调试。类式 Storm 的线程模型,有一个 JVM 中只跑该 Job 的 Tasks 实际应用中更为合理。

没人 Flink 为那先 要设计这4张图呢,其目的是那先 呢?Spark 中须要多张图,数据依赖图以及物理执行的DAG。其目的须要一样的,随后解耦,每张图各司其职,每张图对应了 Job 不同的阶段,更方便做该阶段的事情。大伙儿给出更完整版的 Flink Graph 的层次图。

作者:阿里上端件团队博客

当 Flink 集群启动后,首先会启动有一个 JobManger 和有一个 或多个的 TaskManager。由 Client 提交任务给 JobManager,JobManager 再调度任务到各个 TaskManager 去执行,但会 TaskManager 将心跳和统计信息汇报给 JobManager。TaskManager 之间以流的形式进行数据的传输。上述三者均为独立的 JVM 线程。

但这并须要最终在 Flink 中运行的执行图,随后有一个 表示拓扑节点关系的计划图,在 Flink 中对应了 SteramGraph。另外,提交拓扑后(并发度设为2)还能在 UI 中想看 另一张执行计划图,如下所示,该图对应了 Flink 中的 JobGraph。

看起来很重乱,为什么在有没人 多不一样的图。实际上,还有更多的图。Flink 中的执行图都能不能分成四层:StreamGraph -> JobGraph -> ExecutionGraph -> 物理执行图。

大伙儿使用 Flink 自带的 examples 包中的 SocketTextStreamWordCount ,这是有一个 从 socket 流中统计单词经常经常出现次数的例子。

类式上文中的有一个 并发度(Source为有一个 并发度)的 SocketTextStreamWordCount 四层执行图的演变过程如下图所示(点击查看大图):

来源:51CTO

SocketTextStreamWordCount 的具体代码如下:

ExecutionGraph:JobManager 根据 JobGraph 生成的分布式执行图,是调度层最核心的数据形态学 。

首先大伙儿想看 ,JobGraph 之上除了 StreamGraph 还有 OptimizedPlan。OptimizedPlan 是由 Batch API 转换而来的。StreamGraph 是由 Stream API 转换而来的。为那先 API 不直接转加上 JobGraph?但会 ,Batch 和 Stream 的图形态学 和优化方法有很大的区别,比如 Batch 有什么都有有有执行前的预分析用来优化图的执行,而你这个 优化不须普适于 Stream,什么都有有有通过 OptimizedPlan 来做 Batch 的优化会更方便和清晰,随后会影响 Stream。JobGraph 的责任随后统一 Batch 和 Stream 的图,用来描述清楚有一个 拓扑图的形态学 ,但会 做了 chaining 的优化,chaining 是普适于 Batch 和 Stream 的,什么都有有有在你这个 层做掉。ExecutionGraph 的责任是方便调度和各个 tasks 状态的监控和跟踪,什么都有有有 ExecutionGraph 是并行化的 JobGraph。而“物理执行图”随后最终分布式在各个机器上运行着的tasks了。什么都有有有都能不能想看 ,你这个 解耦方法极大地方便了大伙儿在各个层所做的工作,各个层之间是相互隔离的。

StreamGraph:根据用户通过 Stream API 编写的代码生成的最初的图。

物理执行图:JobManager 根据 ExecutionGraph 对 Job 进行调度后,在各个TaskManager 上部署 Task 后形成的“图”,并须要有一个 具体的数据形态学 。

大伙儿将最后一行代码 env.execute 替加上 System.out.println(env.getExecutionPlan()); 并在本地运行该代码(并发度设为2),都能不能得到该拓扑的逻辑执行计划图的 JSON 串,将该 JSON 串粘放进去 http://flink.apache.org/visualizer/ 中,能可视化该执行图。

要了解有一个 系统,一般须要从架构始于。大伙儿关心的大问提是:系统部署成功后各个节点都启动了那先 服务,各个服务之间又是为什么在交互和协调的。下方是 Flink 集群启动后架构图。