Flink面试题精简版(持续更新)

作为大数据领域炙手可热的大数据组件,Flink作为大数据行业跳槽必问的组件,整理一些Flink相关的面试题供大家参考,有些题言简意赅即可,大多数的博客冗余一堆的知识点,看完要好久,我想帮大家提炼总结出核心的点,以帮助大家临阵磨枪,短时间掌握,当你把知识提炼出来,你会发现你的知识进步了,当你把简单提炼的知识再用自己的语言详细的说出来,那你就成为很厉害的人了,希望帮助大家收获到自己满意的offer。

1、Flink和Spark Streaming有什么区别

1、Flink 是实时处理引擎,基于事件驱动。而 Spark Streaming 是微批(Micro-Batch)的模型。(根本区别,一定要说出来)

2、时间机制:Spark Streaming只支持处理时间。 Flink支持处理时间、事件时间、注入时间。同时也支持watermark来处理滞后数据。

3、容错机制:Spark Streaming 通过checkpoint实现数据不丢失,但无法做到恰好一次处理语义。Flink 则使用两阶段提交协议和checkpoint实现精准一次处理,容错性好

2、Flink的编程模型

Source 数据输入
Transformation  中间转换
sink 数据输出

3、Flink如何设置并行度(括号里说出来就是真正用过的而不是光背答案)

详细知识在:

1、系统层面(flink客户端的配置yml文件中设置)

2、客户端层面(提交flink run -p的时候设置)

3、执行环境层面(构建Flink环境时getExecutionEnvironment.setParallelism(2)设置)

4、算子层面(算子.setParallelism(3),实际算子时设置)

优先级算子设置>执行环境>客户端>系统

(实际业务中通常设置和kafka分区数一样或者kafka分区倍数的并行度)

4、Flink的Slot和parallelism区别

 slot是指单个taskmanager并发执行能力,parallelism指的是所有taskmanager的并发能力

 5、Flink重启策略有哪些(括号里说出来就是真正用过的而不是光背答案)

详细知识在:Flink故障恢复和重启策略_一杯咖啡半杯糖的博客-CSDN博客_flink故障恢复

固定延迟重启策略
故障率重启策略
没有重启策略
Fallback重启策略(默认是这个Fallback重启策略)

6、Flink分区策略(9种)

详细知识在:Flink 分区策略_一杯咖啡半杯糖的博客-CSDN博客_flink的分区策略

GlobalPartitioner (数据发到下游算子的第一个实例)

ShufflePartitioner( 数据随机分发到下游算子)

RebalancePartitioner (数据循环发送到下游的实例)

RescalePartitioner (根据上下游算子的并行度,循环输出到下游算子)

BroadcastPartitioner (输出到下游算子的每个实例中)

ForwardPartitioner (上下游算子并行度一样)

KeyGroupStreamPartitioner (按 Key 的 Hash 值输出到下游算子)

CustomPartitionerWrapper (用户自定义分区器)

BinaryHashPartitioner  (对BinaryRowData这种数据进行hash分区)

(实际使用在算子后加分区器)

7、Flink状态存储在哪里?

详细的看​​​​​​Flink状态后端(1.13版本之前适用)_一杯咖啡半杯糖的博客-CSDN博客

Flink状态后端(1.13版本及大于1.13版本适用)_一杯咖啡半杯糖的博客-CSDN博客

存在状态后端

1.13版本之前

MemoryStateBackend    开发时使用
FsStateBackend     生产时使用,常用
RocksDBStateBackend   生产时使用,非常大的状态时用

1.13版本之后

HashMapStateBackend  相当于MemoryStateBackend和FsStateBackend,根据api不同
EmbeddedRocksDBStateBackend   生产时使用,非常大的状态时用

8、Flink中的时间有哪几类?(括号里说出来就是真正用过的而不是光背答案)

事件时间(event time):数据本身真正产生时间,(生产环境中用这个)
摄取时间(ingestion time): Flink 读取数据时的时间
处理时间(processing time): Flink中算子处理数据的时间

9、你们公司怎么提交的实时任务?(括号里说出来就是真正用过的而不是光背答案)

flink提交有几种模式

yarn-session模式

Application模式

Per-Job模式(生产中一般用这个,因为不论是监控还是提交都很方便,一个任务yarn分配一次)

关于内存分配的内容详见Flink的jobmanager到底设置多少内存为好_一杯咖啡半杯糖的博客-CSDN博客

 Flink的taskmanager到底设置多少内存为好_一杯咖啡半杯糖的博客-CSDN博客

10、Flink的watermark?(括号里说出来就是真正用过的而不是光背答案)

Watermark 是Flink处理乱序事件的机制,基于事件时间,通常用来触发窗口计算
watermark 可以理解一个特殊的数据,插入到流里面
watermark也可以表示为   当前时间戳-设置的延迟时间,
假如窗口是12点到12点05,最大延迟时间1min,
假如来了条数据是12点07,,那水印就是12点07-1min为12点06  > 12点05,就可以出发上面的窗口进行计算了)

11、Flink集群有的角色及其作用?

TaskManager:实际执行计算,与TaskManager状态的传递
JobManager:任务和资源管理,管理TaskManager,协调Checkpoints,故障恢复
Client客户端:与jobmanager交互并把任务提交到集群

12、Flink如何容错(重要,面试很频繁

更多细节及理解请看Flink如何实现容错_一杯咖啡半杯糖的博客-CSDN博客

通过Checkpoint(基于ABS算法)实现容错
具体过程如下
1、JobManager定期向source发送Checkpoint的请求(由代码中的Checkpoint配置决定),向下游发送CheckpointBarrier
2、每个计算算子收到CheckpointBarrier,进行Barrier对齐,对齐后存储Checkpoint到状态后端,
3、sink节点Barrier对齐后,多个sink确认下Checkpoint是否正常,如果正常JobManager确定本次Checkpoint结束
4、中途失败只需要拿取前面的Checkpoint重新计算,进行恢复

13、Flink 的运行中必须依靠 Hadoop组件吗?

 Flink可以不依赖Hadoop组件执行,例如可以跑单机版(但是实际生产环境使用通常是提交flink到yarn上运行,生产是需要hadoop组件的)

14、Flink 资源管理中 Task Slot 的概念 

 更多细节及理解请看Flink的Slot概念_一杯咖啡半杯糖的博客-CSDN博客

Slot决定了单个TaskManager并发执行能力(TaskManager 中的不同slot不会CPU隔离,也不会在运行时相互竞争Flink托管内存 ,而是一开始就瓜分了Flink托管内存)

 15、Flink 的状态

Flink状态分为两个

1、Keyed State(键控状态)

2、Operator State (算子状态)

(实际生产中通常使用Keyed State中的ValueState、MapState)

你可能感兴趣的:(Flink实战,flink)