Dinky项目中的Flink作业开发全指南
前言
作为一款强大的Flink SQL开发平台,Dinky为开发者提供了完整的Flink作业开发体验。本文将全面介绍如何在Dinky中开发Flink SQL和Flink Jar作业,帮助开发者快速上手并高效完成Flink作业开发。
基础作业配置详解
作业配置面板
在Dinky中开发Flink作业时,首先需要配置基础参数。这些配置决定了作业的运行方式和资源分配:
-
执行模式(必填):支持多种运行模式,包括:
- Local:本地模式,使用内置MiniCluster
- Standalone:独立集群模式
- Yarn Session/Yarn Prejob/Yarn Application:Yarn集群的不同部署方式
- K8s Application/K8s Session:Kubernetes集群部署
-
Flink集群(必填):根据选择的执行模式,需要配置对应的集群实例或集群配置
-
FlinkSQL环境(可选):可配置执行环境或Catalog
-
任务并行度(必填):默认为1,根据业务需求调整
-
全局变量(可选):支持以
${}
语法调用全局变量 -
批模式(可选):启用Batch Mode处理批作业
-
SavePoint策略(可选):配置作业恢复策略
-
报警组(可选):配置作业告警通知
-
其他配置(可选):可添加额外的Flink配置参数
本地模式特别说明
Local模式使用Dinky内置的Flink MiniCluster运行作业,适合快速测试和体验。但需要注意:
- 资源有限,不适合生产环境
- 仅推荐用于临时测试或功能验证
- 生产环境应使用Standalone、Yarn或K8s模式
配置参数扩展
如果默认提供的Flink配置参数不能满足需求,可以通过以下方式扩展:
- 修改
dinky-loader/FlinkConfClass
文件,添加参数对应的全路径类名 - 在注册中心的文档管理中新增Flink参数类型文档
作业版本管理
Dinky提供了完善的版本控制功能:
- 版本历史:每次发布都会创建历史版本记录
- 代码差异对比:可查看当前版本与历史版本的代码差异
- 版本回滚:支持回退到任意历史版本
这些功能为团队协作和问题排查提供了便利,确保开发过程可追溯。
作业执行与预览
作业执行
点击"执行"按钮提交作业时需注意:
- 提交为同步操作,控制台会实时打印执行日志
- 不要将SELECT语句作为作业提交,应使用预览功能
- 作业失败时可通过日志定位问题
数据预览功能
Dinky的数据预览功能极大提升了开发效率:
-
配置选项:
- 打印流:返回ChangeLog信息
- 最大行数:控制返回数据量
- 自动停止:达到最大行数后自动停止
- SinkMock:避免向线上环境写入测试数据
-
使用条件:
- 执行模式必须是Local、Standalone或Session模式
- 未开启MockSink时只能提交单个SELECT/SHOW/DESC语句
- 开启MockSink后可提交Insert语句
- 作业必须成功提交并返回JID
-
结果查看:
- 提交成功后切换到"结果"选项卡
- 点击"获取最新数据"查看执行结果
工具栏功能详解
Dinky开发界面提供了丰富的工具栏功能:
| 功能项 | 说明 | |--------|------| | 保存 | 保存当前作业 | | DAG | 生成Flink SQL流程图 | | 检查 | SQL语法校验 | | 发布 | 发布任务(发布后不可修改) | | 推送 | 推送至DolphinScheduler(需满足条件) | | 运维 | 跳转到运维页面(仅运行中的作业显示) | | 运行 | 提交作业 | | 预览 | 预览作业数据 |
Flink SQL作业开发示例
下面是一个完整的Flink SQL作业示例:
-- 创建源表(使用datagen连接器生成测试数据)
CREATE TABLE datagen_source (
id BIGINT,
name STRING
) WITH ('connector' = 'datagen');
-- 创建结果表(使用blackhole连接器丢弃数据)
CREATE TABLE blackhole_sink (
id BIGINT,
name STRING
) WITH ('connector' = 'blackhole');
-- 将源表数据插入结果表
INSERT INTO blackhole_sink
SELECT id, name
FROM datagen_source;
提交后可在运维中心查看作业运行状态,状态为"Running"表示运行成功。
Flink Jar作业开发
Dinky扩展了Flink SQL语法,支持直接提交Jar作业:
基本语法
EXECUTE JAR WITH (
'uri'='<jar_path>.jar', -- jar文件路径(必填)
'main-class'='<main_class>', -- 主类(必填)
'args'='<args>', -- 参数(可选)
'parallelism'='<parallelism>' -- 并行度(可选)
);
示例1:基本用法
-- 设置检查点间隔
set 'execution.checkpointing.interval'='21 s';
-- 提交Jar作业
EXECUTE JAR WITH (
'uri'='rs:/jar/flink/demo/SocketWindowWordCount.jar',
'main-class'='org.apache.flink.streaming.examples.socket',
'args'=' --hostname localhost ',
'parallelism'=''
);
示例2:Paimon作业
EXECUTE JAR WITH (
'uri'='rs:/paimon-flink-action-0.7.0-incubating.jar',
'main-class'='org.apache.paimon.flink.action.FlinkActions',
'args'='compact --warehouse hdfs:///tmp/paimon --database default --table use_be_hours_2'
);
注意事项
- 资源路径使用rs协议,需确保资源中心存在相应资源
- 主类参数不能为空
- 注意args参数中的空格处理
- 支持通过rs协议访问S3、HDFS、LOCAL等存储系统
总结
Dinky为Flink作业开发提供了全方位的支持,从基础的SQL开发到复杂的Jar作业提交,从本地测试到生产部署,都提供了简单易用的操作界面和强大的功能支持。通过本文的介绍,开发者可以快速掌握Dinky中的Flink作业开发方法,提升开发效率。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考