你好,欢迎来到第 41 课时,本课时我们主要讲解“Flink 面试-源码篇”。
Flink 的源码篇包含了 Flink 的核心代码实现、Job 提交流程、数据交换、分布式快照机制、Flink SQL 的原理等考察点。你应该记得,我们在前面近 40 个课时中几乎每一课时都有一定的篇幅是源码阅读,源码部分的考察是面试时十分重要的一关,如果你对 Flink 的源码有一定的研究而不仅仅停留在使用阶段,那么你的面试成功率将得到大幅提升。
我们本课时将把 Flink 面试中源码部分最高频的考点列举出来。
面试题 1:请从源码层面谈谈 Flink Job 的提交流程。
用户提交的 Flink Job 会被转化成一个 DAG 任务运行。Flink Job 的提交涉及的类主要包括:StreamGraph、JobGraph、ExecutionGraph、TaskManager、JobManager、ResourceManager。
JobManager 会把接收到的需要执行的应用程序进行打包,然后把 JobGraph 转换成可以执行的 ExecutionGraph,接着向 ResourceManager 请求执行任务所需要的资源,也就是我们之前课程中提到的 Slot,如果资源获取成功 JobManager 会负责所有的任务调度,比如 Checkpoint,并且将任务派发给 TaskManager 去执行。
面试题 2:我们通常说的 Flink 的“三层图”结构是什么意思?
这道题要求面试者掌握 Flink 框架引擎划分执行计划的详细过程。
一个 Flink 任务的 DAG 生成计算图大致经历以下 3 个过程。
- 首先,StreamGraph 的拓扑结构最接近代码层面,主要