View
0
Download
0
Category
Preview:
Citation preview
Flink在袋鼠云一站式大数据平台中的使用
Flink China Meetup 上海 - 2018年11月4日
杨思枢 · 袋鼠云 / 技术专家
CONTENT
为什么要扩展Flink SQL
01
目录 >>如何实现流与维表的JOIN
02
https://github.com/DTStack/flinkStreamSQL开源地址:
后续的开发计划
03
01为什么要扩展FlinkSQL
实时计算完全SQL化
在实时计算的世界里不只是流与流的JOIN,还需要流与维表的JOIN
Kafka Kafka
Join
KafkaMysql,Hbase
….
Join
维表流流流
FLinkSQL不支持流与维表JOIN这么办?
修改Flink源码 扩展FlinkSQL?
1. 对Flink的源码改动的地方比较多,无法保证对其他的功能带来影响,要做额外的测试工作
2. 除非合并到社区版本,不然后续合并社区代码是比较大的工作量
修改Flink源码带来的问题
02如何实现流与维表的JOIN
DEMO SQLinsert into
MyResultselect
d.channel, d.info
from ( select a.*,b.infofrom
MyTable a join sideTable b
on a.channel=b.namewhere a.channel = 'xc2’
and a.pv=10 ) as d
Calcite解析Insert into语句,拆分出子语句
1. select a.*,b.info from MyTable a join sideTable b on a.channel=b.namewhere a.channel = 'xc2' and a.pv=10
2. select d.channel, d.info from d
3. insert into MyResult
Calcite继续解析select语句old: select a.*,b.info from MyTable a join sideTable b on a.channel=b.namewhere a.channel = 'xc2' and a.pv=10
判断right table 是否是维表(维表只能是右表)
如果是拆分出left table(select * from MyTable )生成 A
把维表转换成AsyncFunction或者RichFlatMapFunction生成 B
CREATE TABLE sideTable( cf:name varchar as name, cf:info varchar as info, PRIMARY KEY(name), PERIOD FOR SYSTEM_TIME )WITH(type ='hbase’, zookeeperQuorum ='rdos1:2181',
zookeeperParent ='/hbase', tableName ='workerinfo’, cache ='LRU’,
cacheSize ='10000’,cacheTTLMs ='60000’,parallelism ='1' );
AsyncDataStream.orderedWait(A, B, Timeout, TimeUnit)或A.flatMap(B)生成C
生成新的SQL(Select name,channel,pv,xctime,info from C where channel = ‘xc2’ and pv=10)
LRU维表的实现
RichAsyncFunction
open(Configuration)
asyncInvoke(Row, ResultFuture<Row> )
close()
LRU维表
继承
Async I/O简介
Async I/O 是由阿里巴巴贡献给社区的,于1.2版本引入,主要目的是为了解决与外部系统交互时网络延迟成为了系统瓶颈的问题。
ALL维表实现
RichFlatMapFunctionvoid flatMap(IN value, Collector<OUT> out)
ALL维表
继承
03后续的开发计划
后续的开发计划
1.中间临时表(视图)功能
2.性能指标采集到Prometheus
3.维表快照功能
4.redis维表,结果表功能
5.mongodb维表,结果表功能
6.用SQL实现CEP
公司简介
关注袋鼠云技术团队
回复“10”获取PPT资料
Recommended