1.看你用了Flink,简单介绍一下Flink?
Flink是一个实时计算框架,他和spark都是流批一体计算框架,flink提供了有界流和无界流的计算,有界流其实就是flink认为数据是流式的为大多数情况,批量的为小部分情况,也就是说数据有边界叫有界流,数据没有边界叫无界流,也就是无限实时生成的数据。
flink主要对外的API有 DataSet API、DataStream API、Table API
图计算、机器学习。对外提供了有java 和scala、python两种语言接口。
2. Flink 和Spark Streaming的区别有哪些呢?
1、设计思想不同,flink认为批是流的一种,spark认为流式批的一种。
2、架构模型上的不同,spark有Driver、Master、Worker、Executor。flink有TaskManager、JobManager、Task、SubTask、Slot的这些概念
3、Flink的流式数据处理比spark要强很多,例如时间支持三种时间
窗口也比spark要多
4、在数据乱序的情况下,Flink比spark要强,因为flink有watermark,其实运行的时候的计算方法就是 最后一次数据的时间-watermaker如果大于窗口结束时间,就执行
5、对于容错来说,flink也会比spark 要强一点,例如flink支持二阶段事务可以保证程序宕机之后的数据不会重复消费问题,spark也有checkpoint但是只是保证数据不丢失,不能保证是不是重复消费。
3. Flink组件栈有哪些
1、部署模式可以有Local、Cluster、Cloud
2、然后基于Runtime组件进行所有的基础服务
3、上层提供了DataStream API 还有DataSet API
4、在高层级有Table API 、CEP复杂世家才能护理、ML机器学习、图计算
4. Flink需要依赖于Hadoop吗?
Flink可以完全独立于Hadoop,在不依赖Hadoop组件下运行,但是作为大数据的基础,可想而知,这是大部分大数据框架都绕不开的。Flink可以支持很多组件,例如Yarn的资源调度、Hbase的实时数据存储和维表存取、HDFS的状态存储和离线计算等等。
5. 你们FLink集群规模有多大?
这个就根据自己公司的情况就可以了,大部分公司都是采用的yarn模式的部署,当然yarn也有多种模式部署,例如按照单job的,或者直接在yarn申请一大块资源,来负责job的提交,大部分的公司的选择,应该都是单job模式。
6. Flink编程模型是什么?
其实就一句话,就是 Source->Transformation->Sink*
7. Flink集群有哪些角色?都有那些作用?
Flink程序在运行时主要有TaskManager、JobManager、Client三种角色。
JobManager 在集群中处于一个管理者Master的角色,它是整个集群的协调者,负责接收Flink Job的执行情况,协调checkpoint,故障恢复,管理Task Manager。
TaskManager 是负责管理器所在节点上的资源信息,如内存、磁盘、网络,在启动的时候会会将资源向JobManager进行汇报。
Client 是Flink程序提交的客户端,当用户提交一个Flink程序的时候,会首先创建一个Client。然后就会对用户提交的程序进行预处理,并且提交到集群进行处理。
8. TaskSolt是什么?
在Flink的架构中,TaskManager是实际用来执行我们的程序的工作节点,TaskManager是一个JVM进程,其实为了起到资源隔离和,并行执行的一个概念,这个时候就提出了TaskSlot的概念,其实就是为了控制TaskManager能接收多少个Task,TaskManager通过tasksolt来进行控制的,也就是假如我们有个source指定三个并行度,那么他就要用三个solt,还有一个需要主要的就是当算子并行度相同的时候,并且没有发生并行度改变,或者没有shuffle,这个时候他们会在一起,这个是一个优化的概念。
9. Flink常用的算子有那些?
- Map算子
- Filter算子
- KeyBy算子
- Window窗口
10. Flink的并行度是什么?Flink的并行度设置是怎么样的?
其实Flink的并行度很好理解,例如kafkaSource,他的并行度默认就是他的分区数量。并行度就是这个算子,需要多少的tasksolt,我们应该知道就是并行计算的优势。一般并行度是根据自己的数据量来进行设置的,source最好和map这些没有shuffle的算子一直,因为source 和map这些算子压力并不是很大,但是对于我们数据表拉宽的时候,最好可以设大一点。
11. Flink的Solt 和并行度有什么关系?
Solt是TaskManager中的概念,并行度是程序中的概念,也就是执行层面的概念,其实就是Solt是规定这个TaskManager有多少个槽,能支持多少并行度,但是程序制定的并行度使用的是槽也就是Solt,也就是说,TaskManager是提供方,程序是使用方
12. Flink假如遇到程序异常重启怎么办?
Flink有一些重启策略,并且只要做了checkpoint那么就可以做到最少一次,当然不一定可以做到精确一次,但是有些组件是可以做到的。一般设置的重启策略就是固定延迟重启策略,重启不删除checkpoint,一般我们公司设置的重启次数为4次,如果停止了,我们会发钉钉告警,启动的时候从checkpoint来进行启动。
13. Flink的分布式缓存
Flink实现的分布式缓存和Hadoop差不多。目的就是在本地读取文件,然后把它放到taskmanager节点里面,防止task重复拉取数据,降低性能。
14. Flink中的广播变量
我们知道Flink是并行的,计算过程可能不在一个 Slot 中进行,那么有一种情况即:当我们需要访问同一份数据。那么Flink中的广播变量就是为了解决这种情况。我们可以把广播变量理解为是一个公共的共享变量,我们可以把一个dataset 数据集广播出去,然后不同的task在节点上都能够获取到,这个数据在每个节点上只会存在一份。
15. Flink中的窗口有哪些你知道吗?
Flink支持两种划分窗口的方式,按照time和count。session也是一种时间
Tumbing Count Window: 当达到一定条数的时候执行计算,无折叠
Sliding Time Window: 当达到一定时间后,进行翻滚,可以有重叠,一般用来计算近期,例如近5分钟这样的需求。
Tumbing time Window: 当达到一定时间后的,进行滑动,可以联想到以前用的诺基亚的滑盖手机,这个其实就是微批
Sliding Count Window: 当达到一定数量后进行滑动
**Session Window:**窗口数据没有固定的大小,根据用户传入的参数进行划分,窗口数据无叠加。类似于当用户退出的时候,计算这个用户之前的动作。
16. Flink的状态存储?
Flink在做计算的过程中经常需要存储中间状态,来避免数据的丢失,以及异常状态恢复。选择状态存储策略不同,会影响JobManager和Subtask中的状态交互,也就是JobManager会和State进行交互,来进行状态的存储。
Flink提供了三种状态存储:
- MemoryStateBackend
- FsSateBackend
- RocksDBStateBackend
17. Flink中的时间有哪几种?
1、事件时间:事件真实发生的时间
2、摄入时间:进入flink的时间
3、处理时间:进入flink算子的时间
18. Flink中的Watermark是什么?
Watermark是Flink用来处理乱序时间的一种操作,其实在flink中,假如我们用的是事件时间,并且采取的是kafka的source,那么这个时候的窗口执行时间就是各个分区中,最小的那个分区来进行触发的,并且每个分区都要进行触发,才会执行计算,这个是为什呢?其实是因为kafka分区间无序。分区内有序。执行时间就是最大的时间减去watermark>窗口结束时间,这个时候才会执行计算。
因为个人能力有限,不当的地方,还请不吝指正!