Flink SQL入门学习&概念解析

Flink SQL核心功能解密

为何要选择SQL api作为flink的核心API?

在这里插入图片描述
流和批处理的统一:blink底层runtime本身就是一个流与批统一的引擎。SQL可以做到API层的流与批的统一。

lSQL 的流与批统一总结起来就一句话:One Query, One Result。在很多场景,我们既需要批处理,又需要流处理。比如,使用批处理一天跑一个全量,同时使用流处理来做实时的增量更新。在以前经常需要维护两套引擎,写两个 Job,两个 Job 之间还要维护逻辑的一致性,这增加了很多的工作量。如果使用 SQL 的话,我们可以让一份 SQL 代码既跑在批模式下,又跑在流模式下,这样用户只需要维护一份 SQL 代码,这是One Query。而One Result是说,同一份 SQL 代码,在流模式下和批模式下跑出来的结果是一样的,也就是保证了流式 SQL 的语义正确性。

自动调优:查询优化器可以为用户的SQL生成最优的执行计划。

传统意义上的SQL是为批处理而不是流处理设计的,比如传统SQL处理的数据是有限的,而且SQL查询只返回一个结果就结束了。但是流上的查询,处理的数据是无限的,会不断产生结果而且不会结束。

那如何在流上定义SQL呢?需要引出flink SQL的核心概念:

动态表 & 流表二象性

传统SQL是定义在表上的,为了能够在流上定义SQL,我们也需要一个表的概念。这里需要引入动态表这个概念。动态表就是数据会随这时间变化的表,可以想象是数据库中一张被不断更新的表。流与表有非常紧密的关系,流可以看作是动态表,动态表可以看做流。这就是 duality of stream & table

流可以看做是对表的一系列更新操作,把流从头开始重放就可以构造成一个动态表。动态表的每次更新操作都会记录下changelog,通过抽取动态表的changelog可以轻松得到原始的数据流。

所以流式SQL可以想象成连续查询(continuous query)

传统的查询是只运行一次SQL,产生一个结果就结束了,而连续查询会一直运行在那里,每个数据到来,都会持续增量地更新计算结果,从而产生另一个动态表。这个结果动态表(也就是流)会作为另外一个SQL的输入接着计算,从而串起整个数据流的图。

在这里插入图片描述
在这里插入图片描述

高级功能简介:

双流JOIN

双流JOIN功能是将两条流进行关联,用来补齐流上的字段。双流JOIN又分为无限流的双流JOIN和带窗口的双流JOIN。

维表JOIN

详情可以参考:

维表join与异步优化

维表JOIN功能是流与表的关联,也是用来为数据流补齐字段,只是补齐的维度字段是在外部存储的维表中的。对于维表JOIN,可以着手的优化点:Async,cahce,multi-join-merge

异步优化

目的:解决与外部系统交互的时候,网络延迟成为系统瓶颈的问题。

流计算系统中经常需要与外部系统进行交互,比如需要查询外部数据库。

我们的实现方式是向数据库发送用户a的查询请求,然后等待结果返回,在这之前,我们无法发送用户b的查询请求。这是一种同步访问的模式。

在这里插入图片描述

学习资源:

详细介绍+实战
https://blog.csdn.net/qq_23160237/article/details/93626657
官方文档异步介绍
https://ci.apache.org/projects/flink/flink-docs-release-1.3/dev/stream/asyncio.html

这个是flink优化的一些介绍!强推
https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=65870673

TopN

除了全局TopN功能之外
流上的topN可以参考topN介绍

多路输入多路输出

Flink SQL 利用分段优化支持了多路输出,并且多路输出的共享节点做到了资源的复用,使得其不会计算多次/

基于多路输入和输出的功能,可以把Flink SQL作为一个非常简单易用的画数据流的工具,可以容易地构造出一个有流合并,流拆分的复杂DAG作业。

MiniBatch优化

对于有状态的算子,每个进入算子的元素都需要对状态做序列化/反序列化的操作,频繁的序列化/反序列化占了性能开销的一大半。miniBatch的核心思想在于对进入算子的元素,先存着一批,一批数据只需要状态序列化/反序列化一次就行。

Retraction 撤回机制

撤回机制解决了early-fire所导致的结果正确性问题。
撤回机制

Aggregation

window aggregation

三种窗口:

1.TUMBLE(t,INTERVAL ‘2’ HOUR)
固定窗口
2.HOP(t,INTERVAL ‘2’ HOUR,INTERVAL ‘1’ HOUR)
重叠式的窗口
3.SESSION(t,INTERVAL ‘30’ MINUTE)
会话窗口,最大间隔为30min,超过就认为会话结束

group aggregation

就是平时写MYSQL的聚合
在这里插入图片描述

ref:

https://www.jianshu.com/p/bf7ae01dc139

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值