【先收藏,早晚用得到】100个Flink高频面试题系列(三)
持续分享有用、有价值、精选的优质大数据面试题
致力于打造全网最全的大数据面试专题题库
1、Flink如何保证精确一次性消费?
参考答案:
Flink 保证精确一次性消费主要依赖于两种Flink机制
(1)Checkpoint机制
(2)二阶段提交机制
Checkpoint机制
主要是当Flink开启Checkpoint的时候,会往Source端插入一条barrir,然后这个barrir随着数据流向一直流动,当流入到一个算子的时候,这个算子就开始制作checkpoint,制作的是从barrir来到之前的时候当前算子的状态,将状态写入状态后端当中。然后将barrir往下流动,当流动到keyby 或者shuffle算子的时候,例如当一个算子的数据,依赖于多个流的时候,这个时候会有barrir对齐,也就是当所有的barrir都来到这个算子的时候进行制作checkpoint,依次进行流动,当流动到sink算子的时候,并且sink算子也制作完成checkpoint会向jobmanager 报告 checkpoint n 制作完成。
二阶段提交机制
Flink 提供了CheckpointedFunction与CheckpointListener这样两个接口,CheckpointedFunction中有snapshotState方法,每次checkpoint触发执行方法,通常会将缓存数据放入状态中,可以理解为一个hook,这个方法里面可以实现预提交,CheckpointListyener中有notifyCheckpointComplete方法,checkpoint完成之后的通知方法,这里可以做一些额外的操作。例如FLinkKafkaConumerBase使用这个来完成Kafka offset的提交,在这个方法里面可以实现提交操作。在2PC中提到如果对应流程例如某个checkpoint失败的话,那么checkpoint就会回滚,不会影响数据一致性,那么如果在通知checkpoint成功的之后失败了,那么就会在initalizeSate方法中完成事务的提交,这样可以保证数据的一致性。最主要是根据checkpoint的状态文件来判断的。
2、Flink的Slot和parallelism有什么区别?
参考答案:
slot是指taskmanager的并发执行能力,假设我们将 taskmanager.numberOfTaskSlots 配置为3那么每一个 taskmanager 中分配3个 TaskSlot, 3个 taskmanager 一共有9个TaskSlot。
parallelism是指taskmanager实际使用的并发能力。假设我们把 parallelism.default 设置为1,那么9个 TaskSlot 只能用1个,有8个空闲。
3、Flink有没有重启策略?说说有哪几种?
参考答案:
Flink 实现了多种重启策略。
(1)固定延迟重启策略(Fixed Delay Restart Strategy)
(2)故障率重启策略(Failure Rate Restart Strategy)
(3)没有重启策略(No Restart Strategy)
(4)Fallback重启策略(Fallback Restart Strategy)
4、Flink出现数据倾斜怎么办?
参考答案:
(1)Flink数据倾斜如何查看:
在flink的web ui中可以看到数据倾斜的情况,就是每个subtask处理的数据量差距很大,例如有的只有一M 有的100M 这就是严重的数据倾斜了。
(2)KafkaSource端发生的数据倾斜
例如上游kafka发送的时候指定的key出现了数据热点问题,那么就在接入之后,做一个负载均衡(前提下游不是keyby)。
(3)聚合类算子数据倾斜
预聚合加全局聚合
5、Flink checkpoint的超时问题如何解决?
参考答案:
(1)是否网络问题
(2)是否是barrir问题
(3)查看webui,是否有数据倾斜
(4)有数据倾斜的话,那么解决数据倾斜后,会有改善
6、Flink中的时间有哪几类?
参考答案:
Flink 中的时间和其他流式计算系统的时间一样分为三类:事件时间,摄入时间,处理时间三种。如果以 EventTime 为基准来定义时间窗口将形成EventTimeWindow,要求消息本身就应该携带EventTime。如果以 IngesingtTime 为基准来定义时间窗口将形成 IngestingTimeWindow,以 source 的systemTime为准。如果以 ProcessingTime 基准来定义时间窗口将形成ProcessingTimeWindow,以 operator 的systemTime 为准。
7、Flink Table & SQL 熟悉吗?TableEnvironment这个类有什么作用?
参考答案:
TableEnvironment是Table API和SQL集成的核心概念。这个类主要用来:
(1)在内部catalog中注册表
(2)注册外部catalog
(3)执行SQL查询
(4)注册用户定义(标量,表或聚合)函数
(5)将DataStream或DataSet转换为表
(6)持有对ExecutionEnvironment或StreamExecutionEnvironment的引用
8、简单介绍一下Flink cep状态编程?
参考答案:
Complex Event Processing(CEP):
FLink Cep 是在FLink中实现的复杂时间处理库,CEP允许在无休止的时间流中检测事件模式,让我们有机会掌握数据中重要的部分,一个或多个由简单事件构成的时间流通过一定的规则匹配,然后输出用户想得到的数据,也就是满足规则的复杂事件。
9、简单介绍下Flink的CBO,逻辑执行计划和物理执行计划?
参考答案:
Flink的优化执行其实是借鉴的数据库的优化器来生成的执行计划。
CBO,成本优化器,代价最小的执行计划就是最好的执行计划。传统的数据库,成本优化器做出最优化的执行计划是依据统计信息来计算的。Flink 的成本优化器也一样。Flink 在提供最终执行前,优化每个查询的执行逻辑和物理执行计划。这些优化工作是交给底层来完成的。根据查询成本执行进一步的优化,从而产生潜在的不同决策:如何排序连接,执行哪种类型的连接,并行度等等。
10、Flink 异常数据怎么处理
参考答案:
异常数据在我们的场景中,一般分为缺失字段和异常值数据。
异常值: 例如宝宝的年龄的数据,例如对于母婴行业来讲,一个宝宝的年龄是一个至关重要的数据,可以说是最重要的,因为宝宝大于3岁几乎就不会在母婴上面购买物品。像我们的有当日、未知、以及很久的时间。这样都属于异常字段,这些数据我们会展示出来给店长和区域经理看,让他们知道多少个年龄是不准的。如果要处理的话,可以根据他购买的时间来进行实时矫正,例如孕妇服装、奶粉的段位、纸尿裤的大小,以及奶嘴啊一些能够区分年龄段的来进行处理。我们并没有实时处理这些数据,我们会有一个底层的策略任务夜维去跑,一个星期跑一次。
缺失字段: 例如有的字段真的缺失的很厉害,能修补就修补。不能修补就放弃,就像上家公司中的新闻推荐过滤器。