面试题百日百刷-flink篇(十一)

demo软件园 2023-05-04 21:41:16

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

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 上的调用会构建成TableAPI 的抽象语法树,并通过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分钟的数据,这在我看来,也是对内存的极大损伤之一。

了解更多请点我头像或到我的主页去获得,谢谢

0 阅读:60

demo软件园

简介:分享面试题、软件、学习资源、源码相关内容