锁屏面试题百日百刷,每个工作日坚持更新面试题。请看到最后就能获取你想要的,接下来的是今日的面试题:
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分钟的数据,这在我看来,也是对内存的极大损伤之一。
了解更多请点我头像或到我的主页去获得,谢谢