Dinky与DolphinScheduler集成实践指南
前言
在现代大数据处理场景中,任务调度系统扮演着至关重要的角色。本文将详细介绍如何将Dinky与DolphinScheduler进行集成,实现Flink任务的自动化调度管理。Dinky作为一款强大的FlinkSQL开发平台,结合DolphinScheduler的调度能力,能够为企业级数据开发提供完整的解决方案。
环境准备
系统要求
- DolphinScheduler:3.2.1及以上版本
- Dinky:1.0.0及以上版本
- Docker:19.03及以上版本(用于快速部署DolphinScheduler)
为什么选择这些版本?
Dinky 1.0.0版本对DolphinScheduler集成进行了重大优化,提供了更稳定的API对接和更友好的用户界面。而DolphinScheduler 3.2.1版本则提供了完善的API支持和任务调度能力。
DolphinScheduler环境配置
快速部署DolphinScheduler
对于测试环境,我们可以使用Docker快速启动一个DolphinScheduler单机版:
export DOLPHINSCHEDULER_VERSION=3.2.1
docker run --name dolphinscheduler-standalone-server -p 12345:12345 -p 25333:25333 -d apache/dolphinscheduler-standalone-server:"${DOLPHINSCHEDULER_VERSION}"
启动后,可以通过浏览器访问管理界面(默认地址:http://服务器IP:12345/dolphinscheduler/ui/login),使用默认账号admin/dolphinscheduler123登录。
租户与用户管理
- 创建租户:进入"安全中心"→"租户管理",创建新租户
- 用户管理:在"用户管理"中创建或修改用户,确保用户属于正确的租户
租户概念在DolphinScheduler中用于资源隔离,合理规划租户有助于后续的资源管理和权限控制。
创建API访问令牌
在"安全中心"→"令牌管理"中创建访问令牌,这是Dinky与DolphinScheduler通信的凭证。请注意:
- 设置合理的过期时间
- 妥善保存生成的Token,后续在Dinky配置中需要使用
Dinky环境配置
启动Dinky服务
假设Dinky安装在/opt/dinky-1.0.0目录下,执行以下命令启动:
cd /opt/dinky-1.0.0
./auto.sh start 1.16
启动后,访问http://服务器IP:8888,使用默认账号admin/admin登录。
配置DolphinScheduler集成
在Dinky的"配置中心"→"全局配置"中,找到"DolphinScheduler配置"标签页,进行以下配置:
- 服务地址:填写DolphinScheduler的API地址,格式为http://ip:12345/dolphinscheduler
- 访问令牌:填写之前生成的Token
- 项目名称:默认为"Dinky",可根据实际需求修改
- 启用开关:将"是否启用DolphinScheduler"设置为"是"
项目名称对应DolphinScheduler中的项目概念,所有推送的任务都会归类到该项目下。
实践案例:FlinkSQL任务调度
在Dinky中创建任务
- 进入"数据开发"→"项目",右键目录选择"创建任务"
- 选择任务类型(FlinkSQL或FlinkJar),填写任务名称
- 在编辑器中编写SQL逻辑,例如:
-- 检查点配置
set execution.checkpointing.checkpoints-after-tasks-finish.enabled=true;
SET pipeline.operator-chaining=false;
set state.backend.type=rocksdb;
set execution.checkpointing.interval=8000;
set state.checkpoints.num-retained=10;
set cluster.evenly-spread-out-slots=true;
-- 创建源表
CREATE TABLE IF NOT EXISTS source_table3 (
`order_id` BIGINT,
`product` BIGINT,
`amount` BIGINT,
`order_time` as CAST(CURRENT_TIMESTAMP AS TIMESTAMP(3)),
WATERMARK FOR order_time AS order_time - INTERVAL '2' SECOND
) WITH (
'connector' = 'datagen',
'rows-per-second' = '1',
'fields.order_id.min' = '1',
'fields.order_id.max' = '2',
'fields.amount.min' = '1',
'fields.amount.max' = '10',
'fields.product.min' = '1',
'fields.product.max' = '2'
);
-- 创建结果表
CREATE TABLE IF NOT EXISTS sink_table5 (
`product` BIGINT,
`amount` BIGINT,
`order_time` TIMESTAMP(3),
`one_minute_sum` BIGINT
) WITH ('connector' = 'print');
-- 业务逻辑SQL
INSERT INTO sink_table5
SELECT
product,
amount,
order_time,
SUM(amount) OVER (
PARTITION BY product
ORDER BY order_time
RANGE BETWEEN INTERVAL '1' MINUTE PRECEDING AND CURRENT ROW
) as one_minute_sum
FROM source_table3;
- 在右侧"任务配置"面板中填写相关参数,包括执行模式、集群配置等
任务发布与推送
- 发布任务:在Dinky 1.0.0+版本中,必须先发布任务才能推送到DolphinScheduler
- 推送任务:发布成功后,点击"推送"按钮,配置以下参数:
- 工作流名称
- 任务优先级
- 失败策略
- 前置依赖任务(可选)
前置依赖功能允许您建立任务间的依赖关系,但需注意避免循环依赖,系统不会自动检查此类问题。
DolphinScheduler侧操作
- 在DolphinScheduler的"Dinky"项目中查看"工作流定义"
- 找到系统自动创建的工作流,可以看到从Dinky推送过来的任务及其依赖关系
- 将工作流上线并执行,或配置定时调度策略
最佳实践建议
- 命名规范:为任务和工作流制定统一的命名规范,便于后期管理
- 参数配置:合理设置任务优先级和失败策略,根据业务重要性区分
- 依赖管理:谨慎设置任务依赖关系,避免复杂的依赖链
- 版本控制:Dinky的任务发布机制提供了版本控制能力,合理利用这一特性
- 监控告警:结合DolphinScheduler的告警机制,设置任务失败通知
常见问题排查
- 推送失败:检查Token是否有效、服务地址是否正确、网络是否通畅
- 任务执行失败:查看DolphinScheduler的任务日志,定位具体错误原因
- 依赖不生效:确认前置任务是否成功执行,依赖关系配置是否正确
- 资源不足:检查DolphinScheduler worker节点的资源使用情况
总结
通过Dinky与DolphinScheduler的集成,我们实现了:
- 可视化开发:在Dinky中完成FlinkSQL的开发和测试
- 自动化调度:利用DolphinScheduler强大的调度能力管理任务执行
- 简化运维:统一的界面操作降低了运维复杂度
- 提高效率:从开发到调度的全流程页面化操作,显著提升工作效率
这种集成方案特别适合需要定期执行Flink任务的场景,如日报、周报等定时数据处理任务。通过合理的配置和管理,可以构建稳定可靠的大数据任务调度体系。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考