大数据面试题——Flink面试题(一)

大数据面试题——Flink面试题(二):https://www.nowcoder.com/discuss/1026305

大数据面试题——Flink面试题(三):https://www.nowcoder.com/discuss/1027153


1简单介绍一下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的特性包含:

2Flink相比传统的Spark Streaming区别?

这个问题是一个非常宏观的问题,因为两个框架的不同点非常之多。但是在面试时有非常重要的一点一定要回答出来:Flink是标准的实时处理引擎,基于事件驱动。而Spark Streaming是微批(Micro-Batch)的模型。

下面我们就分几个方面介绍两个框架的主要区别:

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支持了流处理程序在时间上的三个定义:处理时间、事件时间、注入时间。同时也支持 watermark 机制来处理滞后数据。

4.容错机制对于Spark Streaming任务,我们可以设置checkpoint,然后假如发生故障并重启,我们可以从上次checkpoint之处恢复,但是这个行为只能使得数据不丢失,可能会重复处理,不能做到恰好一次处理语义。Flink则使用两阶段提交协议来解决这个问题。

3Flink的组件栈有哪些?

根据Flink官网描述,Flink是一个分层架构的系统,每一层所包含的组件都提供了特定的抽象,用来服务于上层组件。

自下而上,每一层分别代表:Deploy层:该层主要涉及了Flink的部署模式,在上图中我们可以看出,Flink支持包括local、Standalone、Cluster、Cloud等多种部署模式。Runtime层:Runtime层提供了支持Flink计算的核心实现,比如:支持分布式Stream处理、JobGraph到ExecutionGraph的映射、调度等等,为上层API层提供基础服务。API层:API层主要实现了面向流(Stream)处理和批(Batch)处理API,其中面向流处理对应DataStream API,面向批处理对应DataSet API,后续版本,Flink有计划将DataStream和DataSet API进行统一。Libraries层:该层称为Flink应用框架层,根据API层的划分,在API层之上构建的满足特定应用的实现计算框架,也分别对应于面向流处理和面向批处理两类。面向流处理支持:CEP(复杂事件处理)、基于SQL-like的操作(基于Table的关系操作);面向批处理支持:FlinkML(机器学习库)、Gelly(图处理)。

4Flink的运行必须依赖Hadoop组件吗?

Flink可以完全独立于Hadoop,在不依赖Hadoop组件下运行。但是做为大数据的基础设施,Hadoop体系是任何大数据框架都绕不过去的。Flink可以集成众多Hadooop组件,例如Yarn、Hbase、HDFS等等。例如,Flink可以和Yarn集成做资源调度,也可以读写HDFS,或者利用HDFS做检查点。

#大数据开发工程师面经##Flink#
全部评论
没得一个很重要的。。。。
1 回复 分享
发布于 2022-08-24 11:26 北京

相关推荐

不愿透露姓名的神秘牛友
11-09 14:54
点赞 评论 收藏
分享
4 28 评论
分享
牛客网
牛客企业服务