写点什么

大数据培训 Flink 高频面试题分享

作者:@零度
  • 2022 年 6 月 10 日
  • 本文字数:2212 字

    阅读完需:约 7 分钟

 一、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 则使用两阶段提交协议来解决这个问题。

二、Flink 的监控页面,有了解吗,主要关注那些指标?

Flink 主要关注的有:(1)Flink 任务运行状态(2)Flink checkpoint 状态统计(3)taskmamger 的状态,内存使用情况以及垃圾回收情况(4)Flink 的 metrics 是 Flink 公开的一个度量系统,metrics 也可以暴露给外部系统,通过在 Flink 配置文件 conf/flink-conf.yaml 配置即可,Flink 原生已经支持了很多 reporter,如 JMX、InfluxDB、Prometheus 等等。我们也可以自定义指标通过 metric 收集,实际开发时经常需要查看当前程序的运行状况,Flink 提供了 UI 界面,有比较详细的统计信息。

三、你们的 Flink 集群规模多大?

大家注意,这个问题看起来是问你实际应用中的 Flink 集群规模,其实还隐藏着另一个问题:Flink 可以支持多少节点的集群规模?

在回答这个问题时候,可以将自己生产环节中的集群规模、节点、内存情况说明,同时说明部署模式(一般是 Flink on Yarn),除此之外,用户也可以同时在小集群(少于 5 个节点)和拥有 TB 级别状态的上千个节点上运行 Flink 任务。

四、Flink 如何保证精确一次性消费

Flink 保证精确一次性消费主要依赖于两种 Flink 机制

1、Checkpoint 机制

2、二阶段提交机制

(1)Checkpoint 机制

主要是当 Flink 开启 Checkpoint 的时候,会往 Source 端插入一条 barrir,然后这个 barrir 随着数据流向一直流动,当流入到一个算子的时候,这个算子就开始制作 checkpoint,制作的是从 barrir 来到之前的时候当前算子的状态,将状态写入状态后端当中。然后将 barrir 往下流动,当流动到 keyby 或者 shuffle 算子的时候,例如当一个算子的数据,依赖于多个流的时候,这个时候会有 barrir 对齐,也就是当所有的 barrir 都来到这个算子的时候进行制作 checkpoint,依次进行流动,当流动到 sink 算子的时候,并且 sink 算子也制作完成 checkpoint 会向 jobmanager 报告 checkpoint n 制作完成。

(2)二阶段提交机制

Flink 提供了 CheckpointedFunction 与 CheckpointListener 这样两个接口,CheckpointedFunction 中有 snapshotState 方法,每次 checkpoint 触发执行方法,通常会将缓存数据放入状态中,可以理解为一个 hook,这个方法里面可以实现预提交,CheckpointListyener 中有 notifyCheckpointComplete 方法,checkpoint 完成之后的通知方法,这里可以做一些额外的操作_大数据视频

例如 FLinkKafkaConumerBase 使用这个来完成 Kafka offset 的提交,在这个方法里面可以实现提交操作。在 2PC 中提到如果对应流程例如某个 checkpoint 失败的话,那么 checkpoint 就会回滚,不会影响数据一致性,那么如果在通知 checkpoint 成功的之后失败了,那么就会在 initalizeSate 方法中完成事务的提交,这样可以保证数据的一致性。最主要是根据 checkpoint 的状态文件来判断的。

五、Flink 如何做压力测试和监控?

我们一般碰到的压力来自以下几个方面:

(1)产生数据流的速度如果过快,而下游的算子消费不过来的话,会产生背压。背压的监控可以使用 Flink Web UI(localhost:8081) 来可视化监控,一旦报警就能知 道。一般情况下背压问题的产生可能是由于 sink 这个 操作符没有优化好,做一下 优化就可以了。比如如果是写入 ElasticSearch, 那么可以改成批量写入,可以调 大 ElasticSearch 队列的大小等等策略。

(2)设置 watermark 的最大延迟时间这个参数,如果设置的过大,可能会造成 内存的压力。可以设置最大延迟时间小一些,然后把迟到元素发送到侧输出流中去。晚一点更新结果。或者使用类似于 RocksDB 这样的状态后端, RocksDB 会开辟 堆外存储空间,但 IO 速度会变慢,需要权衡。

(3)还有就是滑动窗口的长度如果过长,而滑动距离很短的话,Flink 的性能 会下降的很厉害。我们主要通过时间分片的方法,将每个元素只存入一个“重叠窗 口”,这样就可以减少窗口处理中状态的写入。

文章来源于大数据研习社


推荐阅读:

大数据培训 Flink 高频面试题

大数据培训 Flink 基础知识分享

大数据培训面试 Flink 八股文分享

大数据培训-Flink 面试知识分享

用户头像

@零度

关注

关注尚硅谷,轻松学IT 2021.11.23 加入

IT培训 www.atguigu.com

评论

发布
暂无评论
大数据培训Flink高频面试题分享_flink_@零度_InfoQ写作社区