Flink面试通关手册


2019 年是大数据实时核算范畴最不普通的一年,2019 年 1 月阿里巴巴 Blink 开源,大数据范畴一夜间从 Spark 独步天下走向了两强争霸的年代。Flink 由于其天然的流式核算特性以及强壮的处理功用成为炙手可热的大数据处理结构。

时至今日,Flink 现已发展到 1.9 版别,在大数据开发范畴,面试中关于 Flink 的调查现已是大数据开发求职者有必要面临的,本文结合自己作为面试官进程中的阅历详细总结了近 50 个关于 Flink 的面试调查点。

在本文中,分为以下几个部分:

榜首部分:Flink 中的中心概念和根底篇,包括了 Flink 的全体介绍、中心概念、算子等调查点。

第二部分:Flink 进阶篇,包括了 Flink 中的数据传输、容错机制、序列化、数据热门、反压等实践出产环境中遇到的问题等调查点。

第三部分:Flink 源码篇,包括了 Flink 的中心代码完结、Job 提交流程、数据交流、散布式快照机制、Flink SQL 的原理等调查点。

一、 简略介绍一下 Flink

Flink 是一个结构和散布式处理引擎,用于对无界和有界数据流进行有状况核算。而且 Flink 供给了数据散布、容错机制以及资源办理等中心功用。

Flink供给了诸多高笼统层的API以便用户编写散布式使命:

DataSet API, 对静态数据进行批处理操作,将静态数据笼统成散布式的数据集,用户能够方便地运用Flink供给的各种操作符对散布式数据集进行处理,支撑Java、Scala和Python。

DataStream API,对数据流进行流处理操作,将流式的数据笼统成散布式的数据流,用户能够方便地对散布式数据流进行各种操作,支撑Java和Scala。

Table API,对结构化数据进行查询操作,将结构化数据笼统成联系表,并经过类SQL的DSL对联系表进行各种查询操作,支撑Java和Scala。

此外,Flink 还针对特定的运用范畴供给了范畴库,例如: Flink ML,Flink 的机器学习库,供给了机器学习Pipelines API并完结了多种机器学习算法。 Gelly,Flink 的图核算库,供给了图核算的相关API及多种图核算算法完结。

依据官网的介绍,Flink 的特性包括:

支撑高吞吐、低推迟、高功用的流处理
支撑带有工作时刻的窗口 操作
支撑有状况核算的 Exactly-once 语义
支撑高度灵敏的窗口 操作,支撑依据 time、count、session 以及 data-driven 的窗口操作
支撑具有 Backpressure 功用的继续流模型
支撑依据轻量级散布式快照完结的容错
一个运转时一同支撑 Batch on Streaming 处理和 Streaming 处理
Flink 在 JVM 内部完结了自己的内存办理
支撑迭代核算
支撑程序主动优化:防止特定状况下 Shuffle、排序等贵重操作,中心成果有必要进行缓存











二、 Flink 比较传统的 Spark Streaming 有什么差异?

这个问题是一个十分微观的问题,由于两个结构的不同点十分之多。 可是在面试时有十分重要的一点必定要答复出来: Flink 是规范的实时处理引擎,依据工作驱动。而 Spark Streaming 是微批的模型。

下面咱们就分几个方面介绍两个结构的首要差异:

1. 架构模型

Spark Streaming 在运转时的首要人物包括: Master、Worker、Driver、Executor,Flink 在运转时首要包括: Jobmanager、Taskmanager和Slot。

2. 使命调度

Spark Streaming 接二连三的生成细小的数据批次,构建有向无环图DAG,Spark Streaming 会顺次创立 DStreamGraph、JobGenerator、JobScheduler。

Flink 依据用户提交的代码生成 StreamGraph,经过优化生成 JobGraph,然后提交给 JobManager进行处理,JobManager 会依据 JobGraph 生成 ExecutionGraph,ExecutionGraph 是 Flink 调度最中心的数据结构,JobManager 依据 ExecutionGraph 对 Job 进行调度。

3. 时刻机制

Spark Streaming 支撑的时刻机制有限,只支撑 处理时刻 。 Flink 支撑了流处理程序在时刻上的三个界说: 处理时刻、工作时刻、注入时刻 。 一同也支撑