作为大数据领域炙手可热的大数据组件,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)