基于袋鼠云实时开发平台开发 FlinkSQL 任务的实践探索

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 袋鼠云实时开发平台StreamWorks,⼀直致⼒于降低 FlinkSQL 的开发门槛,让更多的数据开发掌握实时开发能⼒,普及实时计算的应⽤。本文为大家介绍在袋鼠云实时开发平台开发 FlinkSQL 任务的四种⽅式。

随着业务的发展,实时场景在各个⾏业中变得越来越重要。⽆论是⾦融、电商还是物流,实时数据处理都成为了其中的关键环节。Flink 凭借其强⼤的流处理特性、窗⼝操作以及对各种数据源的⽀持,成为实时场景下的⾸选开发⼯具。


FlinkSQL 通过 SQL 语⾔⾯向数据开发提供了更友好的交互⽅式,但是其开发⽅式和离线开发 SparkSQL 仍然存在较⼤的差异。袋鼠云实时开发平台StreamWorks,⼀直致⼒于降低 FlinkSQL 的开发门槛,让更多的数据开发掌握实时开发能⼒,普及实时计算的应⽤。


本文将为大家简单介绍在袋鼠云实时开发平台开发 FlinkSQL 任务的四种⽅式。

脚本模式

该模式是最基础的开发⽅式,数据开发人员在平台 IDE 中通过 FlinkSQL 代码,完成 Flink 表定义和业务逻辑加⼯。代码如下:

-- 定义数据源表
CREATE TABLE server_logs (
client_ip STRING,
client_identity STRING,
userid STRING,
user_agent STRING,
log_time TIMESTAMP(3),
request_line STRING,
status_code STRING,
size INT
) WITH (
'connector ' = 'faker ',
'fields .client_ip .expression ' = '#{Internet .publicIpV4Address} ',
'fields .client_identity .expression ' =  '- ',
'fields .userid .expression ' =  '- ',
'fields .user_agent .expression ' = '#{Internet .userAgentAny} ',
'fields .log_time .expression ' =  '#{date .past ' '15 ' ', ' '5 ' ', ' 'SECONDS ' '} ',
'fields .request_line .expression ' = '#{regexify ' '(GET |POST |PUT |PATCH){1} ' '} #{regexify ' '(/search\ .html|/login\ .html|/prod\ .html|c
'fields .status_code .expression ' = '#{regexify ' '(200 |201 |204 |400 |401 |403 |301){1} ' '} ',
'fields .size .expression ' = '#{number .numberBetween ' '100 ' ', ' '10000000 ' '} '
);
-- 定义结果表,  实际应用中会选择  Kafka、JDBC 等作为结果表
CREATE TABLE client_errors (
log_time TIMESTAMP(3),
request_line STRING,
status_code STRING,
size INT
) WITH (
'connector ' = 'stream-x '
);
-- 写入数据到结果表
INSERT INTO client_errors
SELECT
log_time,
request_line,
status_code,
size
FROM server_logs
WHERE status_code SIMILAR TO '4[0-9][0-9] ';

脚本模式的优缺点

优点:灵活性⾼。

缺点:Flink表定义逻辑复杂,如果不熟悉数据源插件,很难记住需要维护哪些参数;如果该任务涉及多张表,代码块中存在⼤段表定义代码,不⽅便排查业务逻辑。

向导模式

基于脚本模式存在的缺点,袋鼠云实时开发平台将 Flink 表定义逻辑抽象成了可视化配置的功能,引导数据开发⼈员通过⻚⾯配置化的⽅式完成 Flink 表定义,让数据开发更专注在业务逻辑的加⼯。

向导模式是在开发⻚⾯的配置项中根据⻚⾯引导,完成 Flink 表的源表、维表、结果表的映射,然后在 IDE 中直接引⽤,读写对应的 Flink 表,完成逻辑开发。

· 平台默认提供各类数据源的源表、维表、结果表常⽤配置项;

· 对于各种⾼级参数,平台也提供了维护⾃定义参数的 key/value ⽅式来满⾜灵活性要求。

Catalog 模式

在向导模式中,我们可以借助配置化的⽅式快速完成表映射,但同时也存在⼀个问题,这些映射表只能在当前任务中被引⽤,⽆法在不同的任务中复⽤。


但是在真实的实时数仓建设过程中,我们常会遇到下⾯这种场景:某⼀个 dws 层级的 kafka topic,会在多个 ads 任务中被作为源表使⽤。⽽在每个 ads 任务开发过程中,都需要为同⼀个 dws topic 做⼀次相同的 Flink 映射。


为了解决这种重复映射的开发⼯作,我们可以借助 Flink Catalog 功能,将映射表的元数据信息进⾏持久化存储,这样就可以在不同的任务中重复引⽤。具体使⽤⽅法如下(以平台的 DT Catalog 为例):

Catalog ⽬录维护

· 先在 DT Catalog 下创建⼀个名为 stream_warehouse 的 catalog

· 然后在该 catalog 下根据数仓层级或者业务域创建不同的 database

Flink 映射表创建

· ⽅式⼀:在⽬录中 hover database,根据引导通过配置化⽅式完成 Flink 表映射

· ⽅式⼆:在 IDE 中,通过 Create DDL 完成创建,注意要指定对应的 catalog.database 路径

CREATE TABLE stream_warehouse .dws .orders (
order_uid  BIGINT,
product_id BIGINT,
price      DECIMAL(32, 2),
order_time TIMESTAMP(3)
) WITH (
'connector ' = 'datagen '
);

FlinkSQL 任务开发

完成上面两个步骤,⼀张元数据持久化存储的 Flink 映射表就创建好了。我们在开发任务的时候,就可以直接通过 catalog.database.table 的⽅式,引⽤我们需要的表。

INSERT INTO stream_warehouse .ads_db .client_errors
SELECT
log_time,
request_line,
status_code,
size
FROM stream_warehouse .dws_db .server_logs

Demo 模式

学会了上⾯三种开发⽅式后,如果你还对 FlinkSQL 的开发逻辑⽐较陌⽣,那么建议你可以通过袋鼠云实时开发平台代码模版中⼼去完成⼀个完整的任务开发。


在模版中⼼,我们提供了⼆⼗余种常⻅的业务场景及其对应的 FlinkSQL 代码逻辑,如各类窗⼝的写法、各类 Join 的写法等等,你可以根据真实的业务场景去套⽤模版,快速地完成任务开发。

总结

每种开发模式没有绝对的好坏之分,需要根据不同企业的实时计算场景和阶段,采⽤不同的开发模式,才能真正达到降本增效的目的。

· 当企业刚接触实时计算,数据开发⼈员对 FlinkSQL 熟悉度较低时,DEMO 模式是最好的选择;

· 当企业已经上⼿实时计算,但是任务量还不⼤时,脚本模式或者向导模式是不错的选择;

· 当企业实时计算达到⼀定规模,需要进⾏类似离线数仓的管理⽅式时,Catalog 模式是最优的选择。

《数据治理行业实践白皮书》下载地址:https://fs80.cn/380a4b

《数栈V6.0产品白皮书》下载地址:https://fs80.cn/cw0iw1

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szalykfz

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术 qun」,交流最新开源技术信息,qun 号码:30537511,项目地址:https://github.com/DTStack

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
目录
相关文章
|
12月前
|
SQL Cloud Native 关系型数据库
陈长城:NineData面向Doris实时数仓集成的技术实践
在刚刚过去的北京Doris Summit Asia 2023,玖章算术技术副总裁陈长城受邀参加并做了《NineData面向Doris实时数仓集成的技术实践》报告。
1093 1
|
存储 SQL 监控
阿里云“玩转云上 StarRocks3.0 湖仓分析”训练营火热报名中,开启数据分析新范式
阿里云 EMR OLAP 团队与 StarRocks 社区联合出品,玩转云上 StarRocks3.0 湖仓分析训练营,围绕 StarRocks3.0 系列解读、EMR Serverless StarRocks 存算分离功能与应用场景介绍,开启数据分析新范式!
871 0
|
运维 分布式计算 监控
生物信息分析工作流上云技术分享2:Nextflow技术解析与实践
这次我们来深入了解一下NextFlow的软件架构、使用方法,以及与后端计算资源的对接方案。通过实际案例,帮助读者了解NextFlow的强大功能和灵活性。
|
SQL 机器学习/深度学习 分布式计算
流批一体架构在快手的实践和思考|行业实践专栏上线
Flink-learning 学训平台和互娱行业实践专栏来啦!
10383 0
流批一体架构在快手的实践和思考|行业实践专栏上线
|
数据挖掘 大数据 Apache
行业实践专栏上线|互娱领域专家解读 Flink 企业应用实践
Flink-learning 学训平台第 3 期课程——互娱行业实践专栏上线啦!
487 0
|
分布式计算 MaxCompute
《SaaS模式云数据仓库实践手册》电子版下载地址
本书的制作目的在于让MaxCompute帮助企业构建全托管的现代化数仓,简化数据洞察、加速价值实现。
97 0
《SaaS模式云数据仓库实践手册》电子版下载地址
|
数据采集 DataWorks 大数据
《DataWorks全链路数据质量解决方案-2020飞天大数据平台实战应用第一季》电子版地址
DataWorks全链路数据质量解决方案-2020飞天大数据平台实战应用第一季
146 0
《DataWorks全链路数据质量解决方案-2020飞天大数据平台实战应用第一季》电子版地址
|
运维 监控
《ARMS3.0 助力安利搭建一体化运维监控平台》电子版地址
ARMS3.0 助力安利搭建一体化运维监控平台.ppt
102 0
《ARMS3.0 助力安利搭建一体化运维监控平台》电子版地址
|
运维 监控
《ARMS助力安利搭建一体化监控运维平台》电子版地址
ARMS助力安利搭建一体化监控运维平台.ppt
276 0
《ARMS助力安利搭建一体化监控运维平台》电子版地址
|
SQL 存储 弹性计算
EMR重磅发布智能运维诊断系统(EMR Doctor)——开源大数据平台运维利器
E-MapReduce 推出面向开源大数据集群的智能运维诊断系统 E-MapReduce Doctor,有效提升大数据集群运维效率,辅助 EMR 用户完善集群监控体系。
3522 0
EMR重磅发布智能运维诊断系统(EMR Doctor)——开源大数据平台运维利器