实时数据开发对非开发人员实在太过艰难,编程语言和众多窗口、状态、水位线、分布式概念都需要去掌握,显然是不太可能的。而SQL语言相对标准又不需要对底层有太多了解,还有基于规则的优化,大大降低了开发难度。
flink-sql就是目前使用范围最广的实时数据开发框架flink的所封装的高级API,如果能掌握使用一定有利于更好的开发。
但是flink-sql正在处于版本变更快速、使用方法不稳定等诸多问题,尚未成为主流用法。
所以想写一个系列试图基于目前1.14.0甚至更新的版本关于flink-sql尽可能完善的用法。
flink sql 通过Apache Calcite实现了了标准的sql,sql的执行流程大致如下:
1.Sql Parser:将SQL语句通过java cc解析成AST(语法树),在Calcite中用SqlNode表 示AST;
2.Sql Validator:结合Catalog去验证SQL语法;
3.生成Logical Plan:将sqlNode表示的AST转换成LogicalPlan, 用relNode表示;
4.生成Optimized LogicalPlan:基于Calcite rules优化Logical Plan,再基于Flink定
制的一些优化rules优化Logical Plan;
5.生成Flink PhysicalPlan:基于Flink里头的rules,将Optimized LogicalPlan转成成
Flink的物理执行计划;
6.通过代码生成技术(CodeGen )生成transformation后进一步编译为可执行的
JobGraph提交运行。
以上以后再详细去聊,因为对于普通sql的使用人员来说并不太需要了解多详细。
后续需要写代码的部分,基本会使用scala去写,简洁的代码会比java更方便阅读。同时虽然sql 和Table API集成在同一套API下,但是后面也会尽量使用sql的方式去完成。
网友评论