64道企业真实Flink题目让你无惧Flink面试(带答案) |
您所在的位置:网站首页 › 面试题时间 › 64道企业真实Flink题目让你无惧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和spark区别flink是一个类似spark的“开源技术栈”,因为它也提供了批处理,流式计算,图计算,交互式查询,机器学习等。flink也是内存计算,比较类似spark,但是不一样的是,spark的计算模型基于RDD,将流式计算看成是特殊的批处理,他的DStream其实还是RDD。而flink吧批处理当成是特殊的流式计算,但是批处理和流式计算的层的引擎是两个,抽象了DataSet和DataStream。flink在性能上也表现的很好,流式计算延迟比spark少,能做到真正的流式计算,而spark只能是准流式计算。而且在批处理上,当迭代次数变多,flink的速度比spark还要快,所以如果flink早一点出来,或许比现在的Spark更火。 3、Flink的状态可以用来做什么?Flink状态主要有两种使用方式: checkpoint的数据恢复逻辑计算 4、Flink的waterMark机制,Flink watermark传递机制Flink 中的watermark机制是用来处理乱序的,flink的时间必须是event time ,有一个简单的例子就是,假如窗口是5秒,watermark是2秒,那么 总共就是7秒,这个时候什么时候会触发计算呢,假设数据初始时间是1000,那么等到6999的时候会触发5999窗口的计算,那么下一个就是13999的时候触发10999的窗口 其实这个就是watermark的机制,在多并行度中,例如在kafka中会所有的分区都达到才会触发窗口 5、Flink的时间语义Event Time 事件产生的时间 Ingestion time 事件进入Flink的时间 processing time 事件进入算子的时间 6、Flink window join1、window join,即按照指定的字段和滚动滑动窗口和会话窗口进行 inner join 2、是coGoup 其实就是left join 和 right join, 3、interval join 也就是 在窗口中进行join 有一些问题,因为有些数据是真的会后到的,时间还很长,那么这个时候就有了interval join但是必须要是事件时间,并且还要指定watermark和水位以及获取事件时间戳。并且要设置 偏移区间,因为join 也不能一直等的。 7、flink窗口函数有哪些Tumbing window Silding window Session window Count winodw 8、keyedProcessFunction 是如何工作的。假如是event time的话keyedProcessFunction 是有一个ontime 操作的,假如是 event时间的时候 那么 调用的时间就是查看,event的watermark 是否大于 trigger time 的时间,如果大于则进行计算,不大于就等着,如果是kafka的话,那么默认是分区键最小的时间来进行触发。 9、flink是怎么处理离线数据的例如和离线数据的关联?1、async io 2、broadcast 3、async io + cache 4、open方法中读取,然后定时线程刷新,缓存更新是先删除,之后再来一条之后再负责写入缓存 10、flink支持的数据类型DataSet Api 和 DataStream Api、Table Api 11、Flink出现数据倾斜怎么办Flink数据倾斜如何查看: 在flink的web ui中可以看到数据倾斜的情况,就是每个subtask处理的数据量差距很大,例如有的只有一M 有的100M 这就是严重的数据倾斜了。 KafkaSource端发生的数据倾斜 例如上游kafka发送的时候指定的key出现了数据热点问题,那么就在接入之后,做一个负载均衡(前提下游不是keyby)。 聚合类算子数据倾斜 预聚合加全局聚合 12、flink 维表关联怎么做的1、async io 2、broadcast 3、async io + cache 4、open方法中读取,然后定时线程刷新,缓存更新是先删除,之后再来一条之后再负责写入缓存 13、Flink checkpoint的超时问题 如何解决。1、是否网络问题 2、是否是barrir问题 3、查看webui,是否有数据倾斜 4、有数据倾斜的话,那么解决数据倾斜后,会有改善, 14、flinkTopN与离线的TopN的区别topn 无论是在离线还是在实时计算中都是比较常见的功能,不同于离线计算中的topn,实时数据是持续不断的,这样就给topn的计算带来很大的困难,因为要持续在内存中维持一个topn的数据结构,当有新数据来的时候,更新这个数据结构 15、sparkstreaming 和flink 里checkpoint的区别sparkstreaming 的checkpoint会导致数据重复消费 但是flink的 checkpoint可以 保证精确一次性,同时可以进行增量,快速的checkpoint的,有三个状态后端,memery、rocksdb、hdfs 16、简单介绍一下cep状态编程Complex Event Processing(CEP): FLink Cep 是在FLink中实现的复杂时间处理库,CEP允许在无休止的时间流中检测事件模式,让我们有机会掌握数据中重要的部分,一个或多个由简单事件构成的时间流通过一定的规则匹配,然后输出用户想得到的数据,也就是满足规则的复杂事件。 17、 Flink cep连续事件的可选项有什么 18、如何通过flink的CEP来实现支付延迟提醒 19、Flink cep 你用过哪些业务场景 20、cep底层如何工作 21、cep怎么老化 22、cep性能调优 23、Flink的背压,介绍一下Flink的反压,你们是如何监控和发现的呢。Flink 没有使用任何复杂的机制来解决反压问题,Flink 在数据传输过程中使用了分布式阻塞队列。我们知道在一个阻塞队列中,当队列满了以后发送者会被天然阻塞住,这种阻塞功能相当于给这个阻塞队列提供了反压的能力。 当你的任务出现反压时,如果你的上游是类似 Kafka 的消息系统,很明显的表现就是消费速度变慢,Kafka 消息出现堆积。 如果你的业务对数据延迟要求并不高,那么反压其实并没有很大的影响。但是对于规模很大的集群中的大作业,反压会造成严重的“并发症”。首先任务状态会变得很大,因为数据大规模堆积在系统中,这些暂时不被处理的数据同样会被放到“状态”中。另外,Flink 会因为数据堆积和处理速度变慢导致 checkpoint 超时,而 checkpoint 是 Flink 保证数据一致性的关键所在,最终会导致数据的不一致发生。 Flink Web UI Flink 的后台页面是我们发现反压问题的第一选择。Flink 的后台页面可以直观、清晰地看到当前作业的运行状态。 Web UI,需要注意的是,只有用户在访问点击某一个作业时,才会触发反压状态的计算。在默认的设置下,Flink的TaskManager会每隔50ms触发一次反压状态监测,共监测100次,并将计算结果反馈给JobManager,最后由JobManager进行反压比例的计算,然后进行展示。 在生产环境中Flink任务有反压有三种OK、LOW、HIGH OK正常 LOW一般 HIGH高负载 24、Flink的CBO,逻辑执行计划和物理执行计划Flink的优化执行其实是借鉴的数据库的优化器来生成的执行计划。 CBO,成本优化器,代价最小的执行计划就是最好的执行计划。传统的数据库,成本优化器做出最优化的执行计划是依据统计信息来计算的。Flink 的成本优化器也一样。Flink 在提供最终执行前,优化每个查询的执行逻辑和物理执行计划。这些优化工作是交给底层来完成的。根据查询成本执行进一步的优化,从而产生潜在的不同决策:如何排序连接,执行哪种类型的连接,并行度等等。 // 待完成 25、Flink中数据聚合,不使用窗口怎么实现聚合valueState 用于保存单个值 ListState 用于保存list元素 MapState 用于保存一组键值对 ReducingState 提供了和ListState相同的方法,返回一个ReducingFunction聚合后的值。 AggregatingState和 ReducingState类似,返回一个AggregatingState内部聚合后的值 26、Flink中state有哪几种存储方式Memery、RocksDB、HDFS 27、Flink 异常数据怎么处理异常数据在我们的场景中,一般分为缺失字段和异常值数据。 异常值: 宝宝的年龄的数据,例如对于母婴行业来讲,一个宝宝的年龄是一个至关重要的数据,可以说是最重要的,因为宝宝大于3岁几乎就不会在母婴上面购买物品。像我们的有当日、未知、以及很久的时间。这样都属于异常字段,这些数据我们会展示出来给店长和区域经理看,让他们知道多少个年龄是不准的。如果要处理的话,可以根据他购买的时间来进行实时矫正,例如孕妇服装、奶粉的段位、纸尿裤的大小,以及奶嘴啊一些能够区分年龄段的来进行处理。我们并没有实时处理这些数据,我们会有一个底层的策略任务夜维去跑,一个星期跑一次。 缺失字段: 有的字段真的缺失的很厉害,能修补就修补。不能修补就放弃,就像上家公司中的新闻推荐过滤器。 28、Flink 监控你们怎么做的1、我们监控了Flink的任务是否停止 2、我们监控了Flink的Kafka的LAG 3、我们会进行实时数据对账,例如销售额。 29、Flink 有数据丢失的可能吗Flink有三种数据消费语义: At Most Once 最多消费一次 发生故障有可能丢失At Least Once 最少一次 发生故障有可能重复Exactly-Once 精确一次 如果产生故障,也能保证数据不丢失不重复。flink 新版本已经不提供 At-Most-Once 语义。 30、Flink interval join 你能简单的写一写吗 DataStream keyed1 = ds1.keyBy(o -> o.getString("key")) DataStream keyed2 = ds2.keyBy(o -> o.getString("key")) //右边时间戳-5s |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |