乐趣区

关于后端:面试题百日百刷flink篇十一

锁屏面试题百日百刷,每个工作日保持更新面试题。 请看到最初就能获取你想要的, 接下来的是今日的面试题:

1. 简略说说 FlinkSQL 的是如何实现的?**

首先大家要晓得 Flink 的 SQL 解析是基于 Apache Calcite 这个开源框架。

Flink 将 SQL 校验、SQL 解析以及 SQL 优化交给了 Apache Calcite。Calcite 在其余很多开源我的项目里也都利用到了,譬如 Apache Hive, Apache Drill, Apache Kylin, Cascading。Calcite 在新的架构中处于外围的位置,如下图所示。

构建形象语法树的事件交给了 Calcite 去做。SQL query 会通过 Calcite 解析器转变成 SQL 节点树,通过验证后构建成 Calcite 的形象语法树(也就是图中的 Logical Plan)。另一边,Table API 上的调用会构建成 Table API 的形象语法树,并通过 Calcite 提供的 RelBuilder 转变成 Calcite 的形象语法树。而后顺次被转换成逻辑执行打算和物理执行打算。在提交工作后会散发到各个 TaskManager 中运行,在运行时会应用 Janino 编译器编译代码后运行。基于此,一次残缺的 SQL 解析过程如下:

1) 用户应用对外提供 Stream SQL 的语法开发业务利用

2) 用 calcite 对 StreamSQL 进行语法测验,语法测验通过后,转换成 calcite 的逻辑树节点;最终造成 calcite 的逻辑打算

3) 采纳 Flink 自定义的优化规定和 calcite 火山模型、启发式模型独特对逻辑树进行优化,生成最优的 Flink 物理打算

4) 对物理打算采纳 janino codegen 生成代码,生成用低阶 API DataStream 形容的流利用,提交到 Flink 平台执行

2. 介绍一下 Flink 的 CEP 机制 **

CEP 全称为 Complex Event Processing,简单事件处理

Flink CEP 是在 Flink 中实现的简单事件处理(CEP)库

CEP 容许在无休止的事件流中检测事件模式,让咱们有机会把握数据中重要的局部

一个或多个由简略事件形成的事件流通过肯定的规定匹配,而后输入用户想得到的数据 —— 满足规定的简单事件

3.Flink CEP 编程中当状态没有达到的时候会将数据保留在哪里?

在流式解决中,CEP 当然是要反对 EventTime 的,那么绝对应的也要反对数据的早退景象,也就是 watermark 的解决逻辑。CEP 对未匹配胜利的事件序列的解决,和早退数据是相似的。在 Flink CEP 的解决逻辑中,状态没有满足的和早退的数据,都会存储在一个 Map 数据结构中,也就是说,如果咱们限定判断事件序列的时长为 5 分钟,那么内存中就会存储 5 分钟的数据,这在我看来,也是对内存的极大伤害之一。

全部内容在 git 上, 理解更多请点我头像或到我的主页去取得,谢谢 **

退出移动版