Flink面试题推荐
1、Flink 的四大特征(基石)
Flink包含四大特性,分别是Time实现了watermark机制,从而解决了数据乱序。window窗口特性,可以分为滚动窗口、滑动窗口、会话窗口。state状态特性,可以保存计算的历史结果,常用的有valueState、ListStatue、MapState。checkPoint特性,起到快照的效果。
2、Flink 中都有哪些 Source,哪些 Sink,哪些算子(方法)
flink提供了很多Source,比如一般测试用的像本地集合或者socket以及本地文件,还可以自定义source,常用的像kafka以及MySQL。sink的种类也很多样,一般能够当作source就可以作为sink进行输出,也可以打印到控制台方便测试调试。flink提供的方法API比较多,对数据进行格式或者逻辑处理的像map、flatmap、process、apply、agg等等、过滤的方法像filter、分组的像keyby、合并两个流的像union以及connect、分流的测到输出等等
3、什么是侧道输出流,有什么用途
测到输出可以将一个流事先定义好标签,根据标签处理分成多个流。测到输出还有一个非常重要的作用就是可以将窗口关闭后迟到的数据侧道放在一个流中以供后续处理。
4、Flink 中两个流如何合并为一个流
flink将两个流合并成一个流提供了两个API,一个是union函数,可以将两个数据类型一致的流合并成一个流不会去重,还有connect函数,可以将两个数据类型不一致的流合并,两个流仍可以单独处理。
5、Flink 中两个流如何 join
flink提供了三种join的方式,其中两种基于窗口的join和Cogroup,区别在于join比较固定可以实现内连接的效果,而Cogroup更加灵活,可以自定义怎么进行join,比如实现内连接、左连接、右连接的效果。还有一种基于分组的join Interval Join,可以实现点对线的效果,可以根据key值自己决定能够映射到的连接范围。
6、Flink 中都有哪些 window,什么是滑动,滚动窗口
flink有计数窗口countwindow、时间窗口timewindow、以及会话窗口,滚动窗口是指每过多长时间就统计多长时间的数据,滑动窗口是指,每过多长时间处理和此时间不同时间,一般处理的时间大于间隔的时间。
7、flink 中都有哪些时间语义,对于 event_time 中数据迟到的处理(数据乱序)
flink有事件时间event time、处理时间processing time、摄入时间ingestion time,对于event time中数据迟到,flink提供了watermark机制,可以延迟窗口关闭,只要使用eventtime就必须设置watermark,watermark等于当前最大事件时间-最大允许延迟时间,也可以设置allowedlatestness在窗口被水印触发后仍然可以接收数据,相当于再次延迟窗口开启时间,对于窗口关闭后的事件也可以进行测到输出以供后续处理。
8、flink 中的状态指的是什么?有哪些状态,你使用过哪些状态,哪个项目使用到了状态
flink状态是指flink在计算中的历史数据可以保存在state,常用的像mapstate、Liststate、valuestate都是我经常使用的
9、flink 中 checkpoint 是什么,如何设置。
flink的checkpoint是分布式快照,可以将某个时间点的整个状态保存,当机器故障或者网络故障等可以从最近的checkpoint进行快照恢复,checkpoint可以在任务中代码设置定期进行快照也可以通过执行任务命令时添加命令参数save point设置checkpoint。
10、flink 中的重启策略 (流式计算中的重启策略)
重启策略是当任务出现异常时,任务能够自行重启保障后续任务继续进行的一种策略,flink开启checkpoint会自动开启重启策略(默认无限重启),重启策略也可以单独设置,并且可以设置重启的次数。
11、什么是维表 join,如何实现,你在哪个项目中使用过维表 join
维表join是flink在执行任务时需要关联其他储存设备的数据,储存在其他设备的数据就是维表,可以通过预先加载的方式将维表储存在list集合中进行维表关联,但是数据量过大会导致内存压力大并且维表更新需要重新执行任务,适合小数据量维表,也可以通过JDBC进行实时查询,每需要一条数据就去数据库查询一次,这样子可以解决每次需要更新集合中的维表,但是如果kafka中数据量很大,MySQL的压力会很大,很可能导致MySQL瘫痪。比较好的做法是将维表一部分热键数据储存在cache中既能减轻MySQL的访问压力又可以解决大数据量问题,我在一个交通的项目中便使用了这三种方法,最终找到了使用Guava cache的解决方案,MySQL维表数据通过guava cache设置最大缓存数据个数实现对照码表实时过滤超速的车辆。
12、flinksql 如何读取 kafka 或者 mysql 的数据。
可以设置一张表接收kafka或者其他源的数据,通过with关键字配置连接,连接之后就可以对flink表进行各种查询或者其他操作。