面试题百日百刷-flink篇(一)

demo软件园 2023-04-19 22:52:29

锁屏面试题百日百刷,每个工作日坚持更新面试题。请看到最后就能获取你想要的,接下来的是今日的面试题:

1.Flink相比传统的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则使用两阶段提交协议来解决这个问题。

2.Flink的组件栈有哪些?

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

自下而上,每一层分别代表:Deploy 层:该层主要涉及了Flink的部署模式,在上图中我们可以看出,Flink 支持包括local、Standalone、Cluster、Cloud等多种部署模式。Runtime 层:Runtime层提供了支持Flink 计算的核心实现,比如:支持分布式Stream 处理、JobGraph到ExecutionGraph的映射、调度等等,为上层API层提供基础服务。API层:API 层主要实现了面向流(Stream)处理和批(Batch)处理API,其中面向流处理对应DataStreamAPI,面向批处理对应DataSet API,后续版本,Flink有计划将DataStream和DataSet API进行统一。

Libraries层:该层称为Flink应用框架层,根据API层的划分,在API层之上构建的满足特定应用的实现计算框架,也分别对应于面向流处理和面向批处理两类。面向流处理支持:CEP(复杂事件处理)、基于SQL-like的操作(基于Table的关系操作);面向批处理支持:FlinkML(机器学习库)、Gelly(图处理)。

了解更多请点我头像或到我的主页去获得,谢谢

0 阅读:3

demo软件园

简介:分享面试题、软件、学习资源、源码相关内容