推荐两个不错的flink项目

2020-07-01 00:00:00 数据 专区 开发 数据源 浪尖

近flink真是风生水起,但是浪院长看来这不过是阿里错过了创造spark影响力之后,想要在flink领域创建的影响力。但是,不可否认flink在实时领域确实目前来看独树一帜,当然也有它不适合的地方,比如今天要推荐的个基于flink开发的项目,流表和维表的join,还有很多地方还是用spark streaming更合适,但是整体的流处理而言flink确实很,虽然目前测出了一些bug,后面会发文说明一下flink开发时候常见的坑和已有的自身bug。接下来转入正题。

flinkStreamSQL

熟悉flink的应该都了解,flink支持流表之间的join,但到1.6为止都不支持流表和维表的join。浪尖近,也在开发流平台,需要到flink流表和维表的join。那么针对这个大家印象,可以写个算子去实现,比如map等。但是浪尖这里开发的流平台不是说自己写api,而是用户通过sql去实现创建source,sink,udf,sql等,这个时候要进行维表join,大家可能是想到了udf。是的对于只有一个维表的情况下使用udf比较方便,但是多个维表,相对就麻烦很多了。

而基于flink开发的flinkStreamSQL主要是实现了flink 流表和维表的join,其主要功能如下:

  • 自定义create table 语法(包括源表,输出表,维表)
  • 自定义create function 语法
  • 实现了流与维表的join

浪尖花了个把小时看了一下源码,源码思路很清晰,主要是两个步骤:

  • 用flink api实现维表的功能: 要实现维表功能就要用到 flink Aysnc I/O 这个功能,是由阿里巴巴贡献给apache flink的。关于异步IO的介绍,可以参考:yq.aliyun.com/articles/
  • 解析流与维表join的sql语法转化成底层的flinkAPI

源码下载地址:

github.com/DTStack/flin

为了方便大家阅读,这里浪尖也把维表转化的过程主要函数贴出来吧:

主函数
Main#main

SQL解析
SqlTree sqlTree = SqlParser.parseSql(sql)
拆读
SqlParser#parseSql
TableInfoParserFactory#parseWithTableType


注册表
registerTable

存在维表的话,维表转换与逻辑sql执行
SideSqlExec#exec
也即是
sideSqlExec.exec(result.getExecSql(), sideTableMap, tableEnv, registerTableCache);

不存在维表的话
tableEnv.sqlUpdate(result.getExecSql());

相关文章