文章目录

1.Flink 的并行度了解吗?Flink 的并行度设置是怎样的?

Flink 中的任务被分为多个并行任务来执行,其中每个并行的实例处理一部分数据。这些并行实例的数量被称为并行度。我们在实际生产环境中可以从四个不同层面设置并行度:

操作算子层面(Operator Level)
执行环境层面(Execution Environment Level)
客户端层面(Client Level)
系统层面(System Level)
需要注意的优先级:算子层面>环境层面>客户端层面>系统层面。

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.link 有没有重启策略?说说有哪几种?

固定延迟重启策略(Fixed Delay Restart Strategy)
故障率重启策略(Failure Rate Restart Strategy)
没有重启策略(No Restart Strategy)
Fallback 重启策略(Fallback Restart Strategy

4.用过 Flink 中的分布式缓存吗?如何使用?

Flink 实现的分布式缓存和 Hadoop 有异曲同工之妙。目的是在本地读取文件,并把他放在 taskmanager 节点中,防止 task 重复拉取。

val env = ExecutionEnvironment.getExecutionEnvironment
// register a file from HDFS
env.registerCachedFile("hdfs:///path/to/your/file", "hdfsFile")
// register a local executable file (script, executable, ...)
env.registerCachedFile("file:///path/to/exec/file", "localExecFile", true)
// define your program and execute
...
val input: DataSet[String] = ...
val result: DataSet[Integer] = input.map(new MyMapper())
...
env.execute()

5.说说 Flink 中的广播变量,使用时需要注意什么

我们知道 Flink 是并行的,计算过程可能不在一个 Slot 中进行,那么有一种情况即:

当我们需要访问同一份数据。那么 Flink 中的广播变量就是为了解决这种情况。我们可以把广播变量理解为是一个公共的共享变量,我们可以把一个 dataset 数据集广播出去,然后不同的 task 在节点上都能够获取到,这个数据在每个节点上只会存在一份。

6.Flink 中的窗口

Flink面试题_2_flink
Flink 支持两种划分窗口的方式,按照 time 和 count。

flink 支持窗口的两个重要属性(size 和 interval)如果 size=interval,那么就会形成 tumbling-window(无重叠数据) 如果 size>interval,那么就会形成 sliding-window(有重叠数据) 如果 size< interval, 那么这种窗口将会丢失数据。比如每 5 秒钟,统计过去 3 秒的通过路口汽车的数据,将会漏掉 2 秒钟的数据。通过组合可以得出四种基本窗口:

time-tumbling-window 无 重 叠 数 据 的 时 间 窗 口 , 设 置 方 式 举 例 :
timeWindow(Time.seconds(5))
time-sliding-window 有 重 叠 数 据 的 时 间 窗 口 , 设 置 方 式 举 例 :
timeWindow(Time.seconds(5), Time.seconds(3))
count-tumbling-window 无重叠数据的数量窗口,设置方式举例:countWindow(5)
count-sliding-window 有重叠数据的数量窗口,设置方式举例:countWindow(5,3)

1.时间窗口
滚动,滑动,会话
2.计数窗口
滑动,滚动

7.说说 Flink 中的状态存储

Flink 提供了三种状态存储方式:MemoryStateBackend、FsStateBackend、RocksDBStateBackend。择的状态存储策略不同,会影响状态持久化如何和 checkpoint 交互。

8.Flink 中的时间

时间语义:
事件时间,摄入时间,处理时间
Event Time, Ingestion Time, Processing Time
时间语义更关心事件创建时间Event Time可以从日志数据的时间戳中获取

9.watermark

水印
是一种衡量EventTime进展的机制,可以设置延迟触发。用来解决乱序情况,和window一起使用。
本质是一个时间戳,用来和window一起处理乱序事件的。