官方地址
https://shardingsphere.apache.org/elasticjob/index_zh.html
作业类型
elastic-job提供了三种类型的作业:
Simple类型作业:SimpleJob需要实现SimpleJob接口,意为简单实现,未经过任何封装,与quartz原生接口相似,比如示例代码中所使用的job
Dataflow类型作业:Dataflow类型用于处理数据流,需实现DataflowJob接口。该接口提供2个方法可供覆盖,分别用于抓取(fetchData)和处理(processData)数据。可通过DataflowJobConfiguration配置是否流式处理。流式处理数据只有fetchData方法的返回值为null或集合长度为空时,作业才停止抓取,否则作业将一直运行下去; 非流式处理数据则只会在每次作业执行过程中执行一次fetchData方法和processData方法,随即完成本次作业。实际开发中,Dataflow类型的job还是很有好用的
Script类型作业:Script类型作业意为脚本类型作业,支持shell,python,perl等所有类型脚本,使用不多,可以参见github文档
作业 | 作业接口 | 执行器 |
---|---|---|
简单作业 | SimpleJob | SimpleJobExecutor |
数据流作业 | DataflowJob | DataflowJobExecutor |
脚本作业 | ScriptJob | ScriptJobExecutor |
附录:
config节点
作业配置信息,以JSON格式存储
JSON属性名 | 描述 |
jobName | 作业名称,为Elastic-Job唯一标识 |
jobClass | 作业实现类名称 |
jobType | 作业类型,目前支持SIMPLE,DATAFLOW和SCRIPT三种类型 |
cron | 作业启动时间的cron表达式 |
shardingTotalCount | 作业分片总数,修改会导致运行中作业重新分片 |
shardingItemParameters | 分片序列号和个性化参数对照表 |
jobParameter | 作业自定义参数,可通过传递该参数为作业调度的业务方法传参,用于实现带参数的作业 例:每次获取的数据量、作业实例从数据库读取的主键等 |
failover | 是否开启失效转移,仅monitorExecution开启时才起作用 |
misfire | 是否开启错过任务重新执行 |
description | 作业描述信息 |
disabled | 作业服务器状态是否禁用,可用于部署作业时,先禁止启动,部署结束后统一启动 |
monitorExecution | 监控作业执行时状态 |
maxTimeDiffSeconds | 允许的本机与注册中心的时间误差秒数 |
monitorPort | 使用dump命令的端口,为-1则表示不开启端口 |
streamingProcess | 是否流式处理数据,如果流式处理数据,则fetchData不返回空结果将持续执行作业,如果非流式处理数据, 则处理数据完成后作业结束 |
jobShardingStrategyClass | 作业分片策略类的全路径 |
scriptCommandLine | SCRIPT型作业作业执行命令行 |
jobEventConfigs | 作业执行事件追踪,可配置log,rdb两种方式,rdb方式需配置driverClassName,url,username,password,logLevel |
jobProperties | 作业定制化属性,目前支持job_exception_handler和executor_service_handler,用于扩展异常处理和自定义作业处理线程池 |
servers节点
作业服务器信息,子节点是作业服务器的IP地址。IP地址节点的子节点存储详细信息。同一台作业服务器只能运行一个相同的作业实例,因为作业运行时是按照IP注册和管理的
子节点名 | 临时节点 | 描述 |
hostName | 否 | 作业服务器名称 |
status | 是 | 作业服务器状态,分为READY和RUNNING,用于表示服务器在等待执行作业还是正在执行作业,如果status节点不存在则表示作业服务器未上线 |
disabled | 否 | 作业服务器状态是否禁用,可用于部署作业时,先禁止启动,部署结束后统一启动 |
sharding | 否 | 该作业服务器分到的作业分片项,多个分片项用逗号分隔,如:0, 1, 2代表该服务器执行第1, 2, 3片分片 |
paused | 否 | 暂停作业的标记,暂停的作业不会终止调度器运行。作业程序再次启动时不会清理此标记 |
shutdown | 否 | 关闭作业的标记,关闭的作业将停止调度,并可通过控制台删除。只有作业程序再次启动时才会清理此标记 |
trigger | 否 | 立刻触发作业的标记,作业在不与上次运行中作业冲突的情况下将立刻启动,并在启动后自动清理此标记 |
execution节点
执行时信息,子节点是分片项序号,从零开始,至分片总数减一。分片项序号的子节点存储详细信息。可通过配置config\monitorExecution为false关闭记录作业执行时信息
子节点名 | 临时节点 | 描述 |
running | 是 | 分片项正在运行的状态,如果没有此节点,并且没有completed节点,表示该分片未运行 |
completed | 否 | 分片项运行完成的状态,下次作业开始执行时会清理 |
failover | 是 | 如果该分片项被失效转移分配给其他作业服务器,则此节点值记录执行此分片的作业服务器IP |
lastBeginTime | 否 | 该分片项最近一次的开始执行时间 |
nextFireTime | 否 | 该分片项下次作业触发时间 |
lastCompleteTime | 否 | 该分片项最近一次的结束执行时间 |
misfire | 否 | 是否开启错过任务重新执行 |
leader节点
作业服务器主节点信息,分为election,sharding和execution三个子节点。分别用于主节点选举,分片和作业执行时处理。leader节点是内部使用的节点,如果对作业框架原理不感兴趣,可不关注此节点
子节点名 | 临时节点 | 描述 |
election\host | 是 | 主节点服务器IP地址一旦该节点被删除将会触发重新选举,重新选举的过程中一切主节点相关的操作都将阻塞 |
election\latch | 否 | 主节点选举的分布式锁为curator的分布式锁使用 |
sharding\necessary | 否 | 是否需要重新分片的标记,如果分片总数变化,或作业服务器节点上下线或启用/禁用,以及主节点选举,会触发设置重分片标记作业在下次执行时使用主节点重新分片,且中间不会被打断作业执行时不会触发分片 |
sharding\processing | 是 | 主节点在分片时持有的节点,如果有此节点,所有的作业执行都将阻塞,直至分片结束主节点分片结束或主节点崩溃会删除此临时节点 |
execution\necessary | 否 | 是否需要修正作业执行时分片项信息的标记,如果分片总数变化,会触发设置修正分片项信息标记,作业在下次执行时会增加或减少分片项数量 |
execution\cleaning | 是 | 主节点在清理上次作业运行时状态时所持有的节点,每次开始新作业都需要清理上次运行完成的作业信息,如果有此节点,所有的作业执行都将阻塞,直至清理结束,主节点分片结束或主节点崩溃会删除此临时节点 |
failover\items\分片项 | 否 | 一旦有作业崩溃,则会向此节点记录,当有空闲作业服务器时,会从此节点抓取需失效转移的作业项 |
failover\items\latch | 否 | 分配失效转移分片项时占用的分布式锁为curator的分布式锁使用 |