Apache DolphinScheduler即将迎来3.3.0版本的发布,届时将有一系列重要的更新和改进。在近期的社区5月份用户线上分享会上,项目PMC 阮文俊为大家介绍了3.3.0版本将带来的主要更新和改进,并为大家指出了如何参与社区的方式。

什么是DolphinScheduler?

DolphinScheduler是一个开源的项目,主要用来进行工作流编排、运行和管理。

它有四个重要的特点:

  • 工作流是基本单位,所有的功能设计都是围绕工作流
  • 这是一个低代码平台,可以不用代码,或用少量的代码来完成工作流相关的工作
  • 不用数据迁移即可进行服务器节点的扩缩容
  • 采用插件化架构

工作流是基本单位

  • 工作流可以包含任务和子工作流,每个任务都需要属于一个工作流。
  • 工作流可以依赖其他工作流,工作流是最小的执行单元。
  • 工作流的执行支持手动或自动触发。

无/低代码操作

  • 可以在UI门户,通过页面托拉拽的交互方式完成工作流的定义和管控操作;
  • 也可以通过OpenAPI或PyDolphinScheduler来完成对工作流的相关操作。



无需数据迁移进行扩缩容

  • 元数据存储在共享的关系数据库中,无需数据迁移即可扩展系统。
  • 服务上线时自动注册到集群,服务下线时,运行中的任务自动转移,无需人工介入。

插件化架构

  • 工作流引擎之外的组件以插件形式实现。
  • 报警插件:Email、Http、微信、Slack等
  • 任务插件:Shell, SQL, Spark, K8s等
  • 数据源插件:Mysql, PG, Oracle等
  • 支持Zookeeper、JDBC、ETCD作为注册中心
  • 支持HDFS、S3、OSS等存储系统

接下来看一下3.3.0版本中有哪些新的变化。

3.3.0版本更新一览

架构更新

3.3.0版本在整体架构和部署方式上没有太大的变化,依然是三个核心服务:API主要用来做一些源数据的管理和授权方面的事情,Master主要是用来做工作流的编排和执行,Worker主要用来做任务的执行和管控。大部份核心组件通过插件的方式被加载。

新版中的一些重大变化包括:

新的任务插件接口

之前的版本在任务插件定义上有着如下问题:

  • 任务插件中的方法与生命周期不匹配,在任务插件定义上没有暴露生命周期的方法,导致任务插件实现时会缺失,暂停、容错等控制方法。。
  • 目前的任务插件接口过于复杂,任务插件接口包含很多子插件的方法,导致任务插件接口越来越膨胀。

3.3.0版本将引入新的任务插件定义接口(V2版本)来管理任务插件实例的生命周期。任务插件实例的生命周期管理包括运行、暂停、杀死、容错、成功和失败状态。

新的任务插件接口会更加清晰明了:

  • 增加ITaskApplicationContext:表示任务插件实例运行的上下文信息,例如 processId、applicationId
  • 增加ITaskListenerManager:可以注册用于侦听任务插件实例的信息更改,便于对任务执行流程进行扩展

容错改进

  • Master容错:

    • 对下线的Master节点持有的工作流程进行容错
    • 插入工作流容错命令
    • 工作流容错将从Worker服务器接管正在运行的任务
  • Worker容错:
    • 处理下线的Worker节点运行的任务
    • 把容错任务分发给新的Worker节点
    • 不同的任务插件的容错行为可能会不同
    • 支持精确一次(exactly-once)、至少一次(at-least-once)、至多一次(at-most-once)的容错行为

参数优先级统一

此前,DolphinScheduler中有多重参数类型,包括启动参数、工作流定义参数、任务定义参数、租户参数等,但存在的问题是这些参数没有统一的优先级,有些参数在运行时无法更改。

在3.3.0版本中,我们对参数优先级进行了优化:

  • 统一了参数优先级,遵循就近原则,如启动参数 > 任务定义参数 > 工作流定义参数。
  • 启动参数优先级最高,其他参数可被启动参数覆盖,解决了参数优先级不一致以及某些参数无法在运行时更改的问题。

工作流触发解耦

目前,DolphinScheduler中所有工作流触发都通过命令表示。目前的方式存在以下弊端:

  • 只能在数据库中插入触发命令,trigger与数据库严格绑定
  • 没有触发命令的schema,难以扩展新的触发

新版本对工作流触发进行了解耦,并可以通过消息中间件来进行工作流触发:

  • 提供了标准的Trigger schema,方便扩展trigger
  • 引入CommandEngine组件来探测待处理的命令
  • 命令的repository不再仅限于关系型数据库,支持从流式系统(如Kafka)中消费命令

事件线程模型改进

当前,DolphinScheduler Master中存在两个事件线程池,分别处理工作流事件和任务状态变更事件。这样的模型导致运行中很难协调这两个线程池,而且事件的顺序可能会丢失,并且用户也很难去设置这两个线程池的大小。

为了改变这一点,3.3.0中做了以下优化:

  • 合并两个事件线程池,一个工作流中的所有事件按FIFO顺序在事件队列中处理
  • 提供了更多的事件指标和事件查询接口,便于监控和管理工作流事件

支持接入多个Hadoop/S3集群

3.3.0之前版本中,当当资源中心配置HDFS/S3,配置第三方系统任务时只能通过配置文件去进行配置,这就导致在运行时不能新增Hadoop集群或S3集群。而且配置文件过大。

新版本中这一块有了变化:

  • 允许在元数据存储中进行配置
  • 支持多个集群
  • 支持在运行时添加新集群
  • 不同任务可以使用不同的集群



AlertServer改进

AlertServer通过HA实现了高可用,使用单线程发送警报。这就导致需要使用额外的机器来部署AlertServer。

新版本中,允许用户将AlertServer嵌入API服务器,并采用多线程模型发送警报,提高了效率。

以上为Apache DolphinScheduler 3.3.0版本将带来的新功能与优化项参考,具体更新内容请关注官网和GitHub发布消息。

如何参与社区

结语

Apache DolphinScheduler 3.3.0版本带来了多项重要更新,增强了系统的稳定性、扩展性和易用性。我们鼓励社区成员积极参与,共同推动项目的发展。

嘉宾简介

  • 姓名:阮文俊
  • Title:Apache DolphinScheduler/SeaTunnel/EventMesh PMC 成员
  • GitHub:ruanwenjun
  • 就职经历:白鲸开源/eBay/拼多多
  • 专业领域:专注于分布式系统和微服务中间件

本文由 白鲸开源 提供发布支持!

DolphinScheduler 3.3.0版本更新一览的更多相关文章

  1. (转)park1.0.0生态圈一览

    转自博客:http://www.tuicool.com/articles/FVBJBjN Spark1.0.0生态圈一览 Spark生态圈,也就是BDAS(伯克利数据分析栈),是伯克利APMLab实验 ...

  2. HMS Core 机器学习服务6.4.0版本更新啦,文本翻译功能增加10种小语种语言类型!

    近日,HMS Core机器学习服务(ML Kit)文本翻译功能在6.4.0版本更新中增加了10种小语种语言类型,分别是马其他语.马其顿.冰岛.乌尔都语.波斯尼亚语.乌克兰语.加泰罗尼亚语.斯洛文尼亚语 ...

  3. DolphinScheduler 1.2.0 源码解析之 MasterServer

    这一篇主要讲解的是dolphinscheduler 1.2.0 的master部分的源码,从主类MasterServer开始,从启动到运行,master主要做了以下三件事情 Zookeeper 节点初 ...

  4. (数据科学学习手札147)Python GIS利器shapely全新2.0版本一览

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,我写过很多篇介绍geopand ...

  5. Apache DolphinScheduler 1.2.0 使用文档(1/8):架构及名词解释

    本文章经授权转载,原文链接: https://blog.csdn.net/MiaoSO/article/details/104770720 目录 1. 架构及名词解释 1.1 DolphinSched ...

  6. jmeter 4.0版本更新说明(个人做个记录)总版本更新合集

    版本4.0 摘要 新的和值得注意的 不兼容的变化 Bug修复 改进 非功能性变化 已知问题和解决方法 谢谢 新的和值得注意的 核心改进 JMeter现在支持JAVA 9. 提供新的边界提取器元件,提供 ...

  7. jmeter 5.0版本更新说明(个人做个记录)

    变化   此页面仅详细说明了当前版本中所做的更改. 先前更改的历史记录中详细介绍了早期更改.   5.0版 摘要 新的和值得注意的 不兼容的变化 Bug修复 改进 非功能性变化 已知问题和解决方法 谢 ...

  8. Spark1.0.0 生态圈一览

          Spark生态圈,也就是BDAS(伯克利数据分析栈),是伯克利APMLab实验室精心打造的,力图在算法(Algorithms).机器(Machines).人(People)之间通过大规模集 ...

  9. 轻量ORM-SqlRepoEx (十二)SqlRepoEx 2.0.1 至 2.2.0 版本更新说明

    一.功能变化 (一).强化特性支持 1.部分类型拥有复杂属性: 2.有些属性不是来源于数据库 3.用户在原来的代码中使用 SqlRepoEx ,减少字段与数据库字段之间的冲突: 4.为支持新的特性及优 ...

  10. Apache DolphinScheduler 1.2.0 task 任务存储结构说明

    本文章经授权转载 Table of Contents 任务总体存储 Shell节点 SQL节点 存储过程节点 SPARK节点 MapReduce(MR)节点 Python节点 Flink节点 HTTP ...

随机推荐

  1. C++之printf函数

    背景 C++中可以使用cout来输出. 但是cout输出一些格式化的数据非常麻烦. 比如: hour,min和sec代表当前时间,需求:按12:00:00格式输出当前时间. //使用cout输出 co ...

  2. 解决 Xshell 无法使用 zsh 的 prompt style

    为了更好的阅读体验,请点击这里 先学习一下 zsh 的配置吧~ 参考资料 从 0 开始:教你如何配置 zsh powerlevel10k 如何给 Xshell 配置呢 当我安装完 oh-my-zsh. ...

  3. scarpy基础

    1. 创建项目 scrapy startproject 项目名称 2. 进入项目 cd 项目名称 3. 创建爬虫 scrapy genspider 名字 域名 4. 可能需要start_urls,修改 ...

  4. Js 中的数组

    在js 中,数组就是对象,除了可以使用字面量语法[...]来声明数组外,它和其它对象没有什么区别.当创建一个数组['a', 'b', 'c']时,内部的实现形式如下: {     length: 3, ...

  5. ubuntu22 flask项目 pyinstaller打包后运行报错: jinja2.exceptions.TemplateNotFound: index.html 的一种解决方案

    前言 有一个flask项目a.py, 目录结构如下: |- a.py |- templates | - index.html |- static |- images 运行 python3 a.py可以 ...

  6. Mac mysql5.7.x my.cnf默认配置

    配置如下 [client] port = 3306 default-character-set=utf8 [mysqld] character_set_server=utf8 datadir=/usr ...

  7. C#——接口

    先来看看微软官方对接口的定义与说明. 接口定义协定. 实现接口的类或结构必须遵循它的协定. 接口可以从多个基接口继承,类或结构可以实现多个接口. 接口可以包含方法.属性.事件和索引器. 接口本身不提供 ...

  8. 【原创软件】第6期:极简SciHub论文下载器

    一.背景 因为科研需求下载英文论文,省得自己去找有效的scihub网址,特此写了一个基于c#和wpf的小软件. 二.使用方法 只需要输入doi即可,点击[打开浏览器下载论文]即可跳转浏览器进行下载.下 ...

  9. [oeasy]python0035_ 整合shell编程_循环_延迟_清屏

    ​ 整合shell编程 回忆上次内容 用\r 可以让输出位置回到行首 原位刷新时间 如果想要的是大字符效果 需要使用 figlet 但同时还希望能刷新 ​ 编辑 这可能吗? 建立脚本 我们得熟悉一下s ...

  10. 接口防刷!利用redisson快速实现自定义限流注解

    问题: 在日常开发中,一些重要的对外接口,需要加上访问频率限制,以免造成资��损失. 如登录接口,当用户使用手机号+验证码登录时,一般我们会生成6位数的随机验证码,并将验证码有效期设置为1-3分钟,如 ...