Apache Flink 1.9 特性学习和 Blink SQL Parser 功能使用

前言

本文对 Flink 1.9版本特性进行了解读(基于社区邮件组讨论),同时对Blink 开源版本 flink-sql-parser 模块进行学习了解,和大家一起交流分享。

在6.28号 Flink 1.9功能已经Freeze掉,结合之前在社区邮件组讨论的1.9新特性,以及6.29号北京 Flink Meetup视频直播解读,整体而言,Flink 1.9特性我认为分为两块,一块是社区原有计划的功能特性(不依赖Blink),另一块是合入Blink相关特性,下面给出个人相关理解。

1.1 社区原计划功能特性

Flink 1.9社区计划特性(确定要做):

  1. 重做Source Interface(FLIP-27)
  2. Savepoint connector(FLIP-43) ,允许用户从SavePoint可以操作和查询状态
  3. interactive programming(FLIP-31).交互式编程,类型在客户端可以进行sql相关操作等等
  4. Terminate / Suspend job with savepoint(FLIP-34)
  5. Flink Web UI 重做 (已经合并)
  6. 重做 Flink 机器学习模块(FLIP-39)

讨论中的功能(可能会做):

  1. active K8s 集成 Google PubSub connector
  2. 原生支持Protobuf格式
  3. Flink Table API Python 支持

1.2 合入Blink相关特性

Flink 1.9合入的 Blink 相关特性,个人觉得主要是Table/SQL方面,以及批处理方面,个人比较期待的Table/SQL方面,也感谢阿里将这部分相关功能进行了开源,下面是相关特性:

  1. Make table planners pluggable,目前Flink 1.9 有社区Planner和Blink Planner,但具体使用哪一种,开发者可以自行选择使用,Blink Planner方面会有更好的SQL方面的功能
  2. Restructure flink-table to separate API from core runtime
  3. Rework Table / SQL type system to integrate better with the SQL standard
  4. Blink作业程序调度组件(待 FLINK-10429完成后),社区作业调度器会进行重构,重构完成,Blink调度器作为一种插件引入

批处理相关:

  1. resource optimization
  2. fine-grained failover
  3. pluggable shuffle service[FLIP-31]
  4. adapting stream operators for batch execution,
  5. Unified Catalog API & Hive metastore integration(FLIP-30)。Hive兼容。

未来架构:

未来Flink 的架构方向,会逐渐废除掉DataSet API,只保留DataStreamAPI. 从用户的角度来看,其需要从两种API里面来进行选择,同时由于不同的语义,不同的Connector等,使用起来,会感觉到困惑。从开发者角度来看,有两套不同的API,相当于你要对着两套不同的API都进行维护,同时添加新功能时,可能两套都要开发,而且这两套代码之间也难以复用。

全新的SQL类型系统:

兼容Hive:

更丰富的Blink 相关功能:

Blink Runner相关功能,会在后续1.9+版本陆续开始合入,大家可以关注社区的FLIP的方向,时刻关注的社区。

2.1.1 Create Function

Create function语法支持:

javascript 复制代码
create function say_hello as 'com.lakeshen.bigdata.SayHello';

Blink分支源码类对应为: SqlCreateFunction,前面是函数的名称,后面是函数的Class路径

2.1.2 Create Table

Create table 总体分为三种,创建Source表(数据输入源)和创建Sink表(数据输出源),维表(关联表)。目前Blink只提供了语法解析,但具体实现需要实时平台方自己实现。Source表和Sink两种表创建语法一样,只是在使用时不同,维表的创建有点不同。Source 表一般出现在select from语法中,一般和view结合使用。而Sink表是结合insert语句来进行使用,维表的话,主要在Join语句中进行使用,主要用来关联数据。

具体语法如下: 创建 Source表语法:

sql 复制代码
create table kafka_src(
    a varchar,
    b varchar,
    c bigint,
    d varchar,
    primary key (a)
)
with(
type = 'kafka'
.....
);

创建Sink表语法:

sql 复制代码
-- 创建Source表语法
create table kafka_src(
    a varchar,
    b varchar,
    c bigint,
    d varchar
)
with(
type = 'kafka'
.....
);
-- insert语句
insert into kafka_src select * from kafka_src_b;

用户开发在with后面写相关的参数,根据这些参数,可以创建出不同的connector进行连接。

2.1.3 Create View

create view表示数据的加工逻辑,具体逻辑需要开发同学自己编写,当然也可以多个view一起使用,具体create view 语法如下:

sql 复制代码
create view get_max_a_b as select max(a) as max_a,max(b) as max_b from kafka_src;

create view get_a_greater_b as select max_a,max_b from get_max_a;

2.2 自定义SQL化实时任务

下面是自己定义了一个SQL化实时任务,

sql 复制代码
-- 创建源表
create table order_src(
messageKey VARBINARY,
  `message`    VARBINARY,
  topic      VARCHAR,
  `partition`  INT,
  `offset`     BIGINT   
)
with(
  type = 'kafka10',
  topic = 'test',
  groupid = 'helloworlds',
  bootstrap.servers='xxxxx:9092'
);
--创建sink表
create table order_sink(
   messagekey VARBINARY,
    message  VARBINARY
)
with(
  type = 'kafka10',
  topic = 'lakeshen_test',
  groupid = 'helloworlds1',
  bootstrap.servers='xxxxxx:9092'
);
--创建一个视图,用户将二进制数组转换成String
CREATE VIEW getstr
AS  SELECT messagekey,
            bytestostr(message) as d  
FROM  order_src ;
-- 插入到结果表中,当d的值为lakeshenlakeshen
insert into  order_sink
select 
    messagekey,d from getstr 
    where d = 'lakeshenlakeshen';

上面程序主要包含了三部分:create table 语法用来创建Source流和Sink,create view语法用来创建相关的数据加工逻辑,最后 insert into输出到结果表。 上面代码是可以使用Blink 来进行SQL解析,同时会生成不同的SqlNode,感兴趣的同学可以自己去尝试调试一下。

3. 结语

Flink 1.9版本可以说是自己非常期待的版本,其在Table/SQL方面公开了很多特性,比如维表Join,DDL 语法的支持。同时正如 Flink Meetup 中杨老师说是,从Flink 1.9版本开始,会加强其在批处理方面的能力,所以你可以在Flink 1.9版本中看到很多关于方面的特性,比如资源优化等,Flink 未来方向是希望将批流计算进行统一,希望Flink 社区越来越好。

更多精彩内容,欢迎关注我的公众号:【雷克分析】我是雷克,我专注于程序员经验、量化交易、大数据 & 数据库、AI大模型的分享, 欢迎关注

相关推荐
武子康2 天前
大数据-236 离线数仓 - 会员指标验证、DataX 导出与广告业务 ODS/DWD/ADS 全流程
大数据·后端·apache hive
武子康3 天前
大数据-235 离线数仓 - 实战:Flume+HDFS+Hive 搭建 ODS/DWD/DWS/ADS 会员分析链路
大数据·后端·apache hive
DianSan_ERP4 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
够快云库4 天前
能源行业非结构化数据治理实战:从数据沼泽到智能资产
大数据·人工智能·机器学习·企业文件安全
AI周红伟4 天前
周红伟:智能体全栈构建实操:OpenClaw部署+Agent Skills+Seedance+RAG从入门到实战
大数据·人工智能·大模型·智能体
B站计算机毕业设计超人4 天前
计算机毕业设计Django+Vue.js高考推荐系统 高考可视化 大数据毕业设计(源码+LW文档+PPT+详细讲解)
大数据·vue.js·hadoop·django·毕业设计·课程设计·推荐算法
计算机程序猿学长4 天前
大数据毕业设计-基于django的音乐网站数据分析管理系统的设计与实现(源码+LW+部署文档+全bao+远程调试+代码讲解等)
大数据·django·课程设计
B站计算机毕业设计超人4 天前
计算机毕业设计Django+Vue.js音乐推荐系统 音乐可视化 大数据毕业设计 (源码+文档+PPT+讲解)
大数据·vue.js·hadoop·python·spark·django·课程设计
十月南城4 天前
数据湖技术对比——Iceberg、Hudi、Delta的表格格式与维护策略
大数据·数据库·数据仓库·hive·hadoop·spark
中烟创新4 天前
灯塔AI智能体获评“2025-2026中国数智科技年度十大创新力产品”
大数据·人工智能·科技