项目地址:https://github.com/KFCFans/PowerJob

官方文档:https://www.yuque.com/powerjob/guidence/ztn4i5

在线试用:https://www.yuque.com/powerjob/guidence/hnbskn

1、概述

PowerJob是新一代分布式任务调度与计算框架,支持CRON、API、固定频率、固定延迟等调度策略,提供工作流来编排任务解决依赖关系,能让您轻松完成作业的调度与繁杂任务的分布式计算。

2、为什么选择PowerJob?

当前市面上流行的作业调度框架有老牌的Quartz、基于Quartz的elastic-job和原先基于Quartz后面移除依赖的xxl-job,这里分别谈一些这些框架现存的缺点。推荐:Java面试题

Quartz可以视为第一代任务调度框架,基本上是现有所有分布式调度框架的“祖宗”。由于历史原因,它不提供Web界面,只能通过API完成任务的配置,使用起来不够方便和灵活,同时它仅支持单机执行,无法有效利用整个集群的计算能力。

xxl-job可以视为第二代任务调度框架,在一定程度上解决了Quartz的不足,在过去几年中是个非常优秀的调度框架,不过放到今天来看,还是存在着一些不足的,具体如下:

数据库支持单一:仅支持MySQL,使用其他DB需要自己魔改代码

有限的分布式计算能力:仅支持静态分片,无法很好的完成复杂任务的计算

不支持工作流:无法配置各个任务之间的依赖关系,不适用于有DAG需求的场景

正所谓长江后浪推前浪,在如今这个数据量日益增长、业务越来越复杂的年代,急需一款更为强大的任务调度框架来解决上诉问题,而PowerJob因此应运而生。

PowerJob可以被认为是第三代任务调度框架,在任务调度的基础上,还额外提供了分布式计算和工作流功能,其主要特性如下:

使用简单:提供前端Web界面,允许开发者可视化地完成调度任务的管理(增、删、改、查)、任务运行状态监控和运行日志查看等功能。

定时策略完善:支持CRON表达式、固定频率、固定延迟和API四种定时调度策略。

执行模式丰富:支持单机、广播、Map、MapReduce四种执行模式,其中Map/MapReduce处理器能使开发者寥寥数行代码便获得集群分布式计算的能力。

DAG工作流支持:支持在线配置任务依赖关系,可视化得对任务进行编排,同时还支持上下游任务间的数据传递

执行器支持广泛:支持Spring Bean、内置/外置Java类、Shell、Python等处理器,应用范围广。

运维便捷:支持在线日志功能,执行器产生的日志可以在前端控制台页面实时显示,降低debug成本,极大地提高开发效率。

依赖精简:最小仅依赖关系型数据库(MySQL/PostgreSQL/Oracle/MS SQLServer…),同时支持所有Spring Data JPA所支持的关系型数据库。

高可用&高性能:调度服务器经过精心设计,一改其他调度框架基于数据库锁的策略,实现了无锁化调度。部署多个调度服务器可以同时实现高可用和性能的提升(支持无限的水平扩展)。

故障转移与恢复:任务执行失败后,可根据配置的重试策略完成重试,只要执行器集群有足够的计算节点,任务就能顺利完成。

3、同类产品对比

4、适用场景

有定时执行需求的业务场景:如每天凌晨全量同步数据、生成业务报表等。

有需要全部机器一同执行的业务场景:如使用广播执行模式清理集群日志。

有需要分布式处理的业务场景:比如需要更新一大批数据,单机执行耗时非常长,可以使用Map/MapReduce处理器完成任务的分发,调动整个集群加速计算。

5、整体架构

快速开始(本地IDE版)

本教程适用于熟悉项目或搭建本地试用/测试环境,正式部署请阅读正式部署章节。

PowerJob 的设计目标为企业级的分布式任务调度平台,即成为公司内部的调度中间件。整个公司统一部署调度中心 powerjob-server,旗下所有业务线应用只需要依赖 powerjob-worker 即可接入获取任务调度与分布式计算能力,通过不同的 appName 相互隔离。

因此,PowerJob 由调度服务器(powerjob-server)和执行器(powerjob-worker)两部分组成,powerjob-server 负责提供 Web 服务和完成任务的调度,powerjob-worker 则负责执行用户所编写的任务代码,同时提供分布式计算能力。

以下为在本地开发环境快速搭建并试用 PowerJob 的教程。
STEP1: 初始化项目

1git clone https://github.com/PowerJob/PowerJob.git
2导入 IDE,源码结构如下,我们需要启动调度服务器(powerjob-server),同时在 samples 工程中编写自己的处理器代码

PowerJob

build_docker.sh

others

script

Project

PowerJob~/Desktop/DistributCompute/PowerJob

github

idea

others

powerjob-cliet

powerjob-common

调度服务器,负责提供Web服务和任务的调度

powerjob-server

powerjob-worker

powerjobworKERAGEnT

搭载powerjob-worker的SpringBoot示例程序

powerjob-worker-samples

target

le-gitignore

LICENSE

pom.xml

Search

image.png



STEP2: 启动调度服务器

1创建数据库(仅需要创建数据库):找到你的 DB,运行 SQL CREATE DATABASE IF NOT EXISTS `powerjob-daily` DEFAULT CHARSET utf8mb4,搞定~
2修改配置文件,配置文件的说明官方文档写的非常详细,此处不再赘述。
需要修改的地方(路径: PowerJob/powerjob-server/powerjob-server-starter/src/main/resources/application-daily.properties)为数据库配置spring.datasource.core.jdbc-url、spring.datasource.core.username和spring.datasource.core.password,当然,有 mongoDB 的同学也可以修改spring.data.mongodb.uri以获取完全版体验。

powerjob-server 日常环境配置文件:application-daily.properties

tips:如果你暂时没有可用的数据库进行测试,那么可以使用以下数据库配置来一键启动 server(仅限测试环境使用!):

3完成配置文件的修改后,可以直接通过启动类 tech.powerjob.server.PowerJobServerApplication 启动调度服务器(注意:需要使用 daily 配置文件启动,可自行百度搜索“SpringBoot 指定配置文件启动”),观察启动日志,查看是否启动成功~启动成功后,访问 http://127.0.0.1:7700/ ,如果能顺利出现 Web 界面,则说明调度服务器启动成功!
4注册应用
○v4.x及前序版本:点击主页应用注册按钮,填入 powerjob-worker-samples 和控制台密码(用于进入控制台),注册示例应用(当然你也可以注册其他的 appName,只是别忘记在示例程序中同步修改~)

程舍用产受入

执行区用娃通

执行虚用注量

注料

image.png


○v5.x 版本:
■选择 PowerJob Account进行登录,简单起见可直接使用超级管理员登录(账号 ADMIN,密码 powerjob_admin)

在简滋源品菱蓝择POWERJOB自带的账户体系,

欢迎使用POWERJOBL

O127.0.0.1:7700/#LOGINHOR

请选择您的登录方式

POWERJOBACCOUNT

DINGTALK

以中世级管理员登录

image.png


■登录后,进入应用管理TAB,点击右上角新增进行应用注册即可。

[必填]应用唯一名称,建议与项目本身的PROECTNAME保持一致,后续WORKER的初始化参数

必填]应用密码,用于OPENAP等场景的鉴权,一旦录入非常不建议修改.

[必填]该应用归属的NANMESPACE,提供二级概念方便管理

权限部分,可授予其他用户相对应的角色

管理域功能,方便归类和管理

.新建应用(执行品)

POERO6

应用展示用名称

限管理观察者

开发者OBSER

扩展属性

APPNAMEAPPNAMELL

NAMESPACENAMESPACE

ANGUAGE

系统设置

TAGTAGS(LIKE)

测试员

NAMESPACE

OBSERVER

SETINGS

额外信息

OBSERVER

个人中心

管理员

命名空间

者OBSERVER

应用管理

APPNAME

密码

标签

取消

image.png


STEP3: 编写示例代码

进入示例工程(powerjob-worker-samples),修改配置文件连接powerjob-server并编写自己的处理器代码。

1修改 powerjob-worker-samples 的 application.properties,将 powerjob.worker.app-name 改为刚刚在控制台注册的名称。


2编写自己的处理器:随便找个地方新建类,继承你想要使用的处理器(各个处理器的介绍可见官方文档,文档非常详细),这里为了简单演示,选择使用单机处理器 BasicProcessor,以下是代码示例。


3启动示例程序,即直接运行主类 tech.powerjob.samples.SampleApplication,观察控制台输出信息,判断是否启动成功。

STEP4: 任务的配置与运行

调度服务器与示例工程都启动完毕后,再次前往Web页面( http://127.0.0.1:7700/ ),进行任务的配置与运行。

进入执行器应用的主界面
v4.x 及前序版本:在首页输入框输入配置的应用名称,成功操作后会正式进入前端管理界面

欢迎使用POWERJOB!

POWERJOB-WORKER-SAMPLES

报警用户录)

执行应用注册

5白1口

LANGUAGEV

G0

image.png


v5.x:在应用管理页面,选择对应的应用,点击右侧“进入”按钮即可。

V5X版本,在管理页直接点击进入即可

POWERJOB

AMESPACENAMESPAE

024-02-1820:19:42

024-02-1820:19:42

FAULTL_NAMESPACE

APPNAME(LIKE)

PWJB_ADMIN

AGTEGSLUIKE

AMESPACE

PWJB_ADMIN

YTESTAPP

彩命名空间

试应用1号

APPNAME

个人中心

应用管理

创建时间

改时间

只看我的(

修改人

CODE

NGUAGE

DID

重置

名称

新地

创建人

系统设置

ID

查询

image.png


进入注册应用首页后,出现如下图页面

POWERJOD

本地时区:AsaSh-n831

诚籽务省时x:ChnaSitencawdfmle

项目抢址

寂用名材

任穷夏在这里完成任务的配置与中gerl-leg.

检查调度服务器的时区是否为预期的时区,不一致会导致调度借误

山住男澳闲在这里完成任务实例的在线监控与运维

当前运行实例故

保群机器傲

近期失败任务傲

任务总数

#

陪工作计直号

内门占用

爵座占用

京常豁

18%1768.6G3)

1721704mm

在这里可以到连接到本调度服务器的执行器信

image.png


新建任务
点击“任务管理” -> “新建任务”(右上角),开始创建任务。

POWVERJOB

G0127.0.0.1:7700/#/OMS/J

务ID任务名和

键字关键字

定时信息

处理器类型

任务管理

系统首页

SETTINGSV

ANGUAGEV

任务实例

执行类型

工作流管

暂无数据

重置

容器

image.png


可按下图说明填写参数

任务参数,该内容会透传到TASKCONTEX#JOBPARAMS中,开发者可根据该参数实现不同处理逻辑

行模式,优先使用健康度优先算法,可选择随机均摊等其他模式

任务最低执行配置要求,低于该配置的机器会被忽略

机限定集群子集执行任务支持IP,TAG,自定义等筛选方式

生命周期,超出该范围自动停止任务

MSLOGGER日志配置,可动态调整日志选型和级

任务执行器核心配置

TECH,POWVERJOB.OFFICIAL,PROCESSORS.IMPLVERIFICATIONPROCESOR千

HNUM":10,"BATCHSIZE":20,"SUBTASKSUCCESSRATE":0.8}

定时调度类型+定时表达式

WELCOMETOUSEPOWERJOB~

{"MODE":"MR","BATCHNUM":

最低CPU核心数

最低磁盘空间(GB)

最低内存(GB)0

[CRON]MAPREDUCE

选择报警通知人员

运行时间限制(毫秒)

最大执行机器数量

时信息CROI

NSTANCE重试次数

MAPREDUCE执行

配置ONLINE

最大实例数3

统计窗口(S)

HEALTH_FIRST

行时配置

开始时间

0015***7*

沉默窗口(S)

单机线程并发度5

命周期

任务描述

集群配置

重试配置

题一一一人

报警配置

执行机器地址

错误闽值

执行配置

任务名称

验定时参数

器配置

结束时间

300000

任务参数

INFO

志配置

内建

数0

0

image.png


●任务名称:名称
●任务描述:描述
●任务参数:任务处理时能够获取到的参数(即各个 Processor 的 process 方法入参 TaskContext 对象的jobParams 属性)(进行一次处理器开发就能理解了)
●定时信息:该任务的触发方式,由下拉框和输入框组成
○API -> 不需要填写任何参数,表明该任务由 OpenAPI 触发,不会被调度器主动调度执行
○CRON -> 填写 CRON 表达式(在线生成网站
○固定频率 -> 任务以固定的频率执行,填写整数,单位毫秒
○固定延迟 -> 任务以固定的延迟执行,填写整数,单位毫秒
○每日固定间隔 -> 哪几天的哪些时间段需要执行,比如每周二和三的10点到11点间每10分钟触发一次
○工作流 -> 不需要填写任何参数,表明该任务由工作流(workflow)触发
●生命周期:任务的有效时间范围,不在生命周期的任务会自动停止。常用于任务的延迟启动和过期自动关停。
●执行配置:由执行类型(单机、广播和 MapReduce )、处理器类型和处理器参数组成,后两项相互关联。
○内置Java处理器
■方式一 -> 填写该处理器的全限定类名(eg, tech.powerjob.samples.processors.MapReduceProcessorDemo)
■方式二 -> 填写 IOC 容器的 bean 名称,比如 Spring 用户可填写 Spring Bean 名称(eg, 处理器使用注解 @Component(value = "powerJobProcessor"),则控制台可填写 powerJobProcessor)
■方式三 -> 方法级注解,非 MapReduce 任务可直接使用注解 @PowerJobHandler 将某个方法转化为 PowerJob 任务,并设置唯一入参 TaskContext注入上下文,具体参考代码
○Java容器 -> 填写容器ID#处理器全限定类名(eg,1#cn.edu.zju.oms.container.ContainerMRProcessor)
○SHELL、Python、SQL 、HTTP 等任务的执行:点击查看官方处理器的使用教程
●运行配置
○派发策略:默认健康度优先,优先选择性能最优机器进行执行,可选随机均摊等其他派发模式
○最大实例数:该任务同时执行的数量,0 代表不限制实例数量
○单机线程并发数:该实例执行过程中每个 Worker 使用的线程数量(MapReduce 任务生效,其余无论填什么,都只会使用必要的线程数)
○运行时间限制:限定任务的最大运行时间,超时则视为失败,单位毫秒,0 代表不限制超时时间(不建议不限制超时时间)。
●重试配置:
○Instance 重试次数:实例级别,失败了整个任务实例重试,会更换 TaskTracker(本次任务实例的Master节点),代价较大,大型Map/MapReduce慎用。
○Task 重试次数:Task 级别,每个子 Task 失败后单独重试,会更换 ProcessorTracker(本次任务实际执行的 Worker 节点),代价较小,推荐使用。
○注:请注意同时配置任务重试次数和子任务重试次数之后的重试放大,比如对于单机任务来说,假如任务重试次数和子任务重试次数都配置了 1 且都执行失败,实际执行次数会变成 4 次!推荐任务实例重试配置为 0,子任务重试次数根据实际情况配置。
●机器配置:用来标明允许执行任务的机器状态,避开那些摇摇欲坠的机器,0 代表无任何限制。
○最低 CPU 核心数:填写浮点数,CPU 可用核心数小于该值的 Worker 将不会执行该任务。
○最低内存(GB):填写浮点数,可用内存小于该值的 Worker 将不会执行该任务。
○最低磁盘(GB):填写浮点数,可用磁盘空间小于该值的 Worker 将不会执行该任务。
●集群配置
○执行机器地址,指定集群中的某几台机器执行任务
■IP模式:多值英文逗号分割,如192.168.1.1:27777,192.168.1.2:27777。常用于 debug 等场景,需要指定特定机器运行。
■TAG 模式:通过 PowerJobWorkerConfig#tag将执行器打标分组后,可在控制台通过 tag 指定某一批机器执行。常用于分环境分单元执行的场景。如某些任务需要屏蔽安全生产环境(tag 设置为环境标),某些任务只需要在特定单元执行(tag 设置单元标)
○最大执行机器数量:限定调动执行的机器数量
●报警配置:选择任务执行失败后报警通知的对象,需要事先录入。
●日志配置:可使用控制台配置调整 Job 使用的 Logger 及 LogLevel
○支持 SERVER(服务端日志,默认)、LOCAL(本地日志)、STDOUT(系统输出)、NULL(空实现)4种 LogType
○支持 DEBUG、INFO、WARN、ERROR、OFF 5种级别控制
○使用建议:初期调试可使用 SERVER 日志,后续功能稳定后改为 LOCAL,并调高日志级别,降低通讯压力,消除性能瓶颈问题
任务运行&运维
完成任务创建后,即可在控制台看到刚才创建的任务,如果觉得等待调度太过于漫长,可以直接点击运行按钮,立即运行本任务。

PowerJA

点击即可立即运行该任务

口糕来营出

剩打炎与

处哥赛供型

任务实料

广翻镇行

工态

李老热行

中华肤特

DAGNOUE-L

HOHKRLOW

速绪

孕奖茂村

YIORIRIOW

DAC-NODE-D

李真行

YIORrROW

申华妆行

vIOHOLow

李餐器荐

增V(农惊

FXDELAYXOCE

荣装压行

HAPR+DS4竹

任务被关闭后不再被调度

image.png


前往任务实例边栏,查看任务的运行状态和在线日志

POWERJOG

L5gomey

口采址品页

鹏炒

口任雾警电

查看任务的详细运行信总

由任茅来付

工作产管出

运价+

三工泰衣享付

翼行申

卡情

张约中

饼精

哼止

1561727037446990A0

运n+

1806177749001906296

2080002425:1601

牛调

18617774B79057C000

诺情

停止

详情

纤情

评准

查若输出到omsLogger的在线日志

image.png



基础的教程到这里也就结束了~

更多功能示例可见官方文档,工作流、MapReduce、容器等高级特性等你来探索!
Others
PowerJob 部署视频教程(server + agent + 容器):点击查看

Logo

更多推荐