背景
三个任务调度框架 XXL-Job、Azkaban、ElasticJob ,对于任务链的支持情况如何呢?本文整理验证 XXL-Job 的子任务的结果。
三种任务调度框架各有优势,最优秀的是 Azkaban 灵活的任务编排能力,XXL-Job 只支持简单的单向链条任务,ElasticJob 不支持子任务,只能通过任务监听器迂回实现。
XXL-Job 的任务依赖
任务 7 配置了一个子任务,当前任务执行完成后,会执行子任务。
各自任务执行器执行完成后,继续触发了任务 2:
依赖多个子任务
上面的任务 7 添加两个任务依赖 2,4,各个任务特征为:
- 父任务 7 ,广播任务
- 子任务 2,单次任务,只第一个执行
- 子任务 4,广播任务
那么子任务的调度,还是按子任务的调度策略执行的:
任务 2 单次执行,被分片任务 7 触发两次;任务 4 是广播执行,被分片任务 7 在两个调度器上都分别触发一次广播行为,即最终执行 4 次。
对比 Azkaban
XXL-Job:广播分片,支持子任务,不支持前置任务;简单的单链条的任务支持。例如:A->B->C-> D。
Azkaban:不支持分片,具有丰富的任务编排能力。
Azkaban 仅仅通过简单地
.job
配置就可以编写丰富的任务链,还是挺强大的。
启示录
XXL-Job 很简单,支持子任务,但是子任务配置时需要考虑业务场景,是否分片,如果是分片任务,可能会多次调度,执行次数是幂次增加的。
Azkaban 通过 Job 描述就能编排任务,真的很强大。
想要一个既简单又支持丰富任务编排的任务调度框架,估计是找不到的了。想要整合 XXL-Job 和 Azkaban 也不太现实,毕竟 Azkaban 的核心功能就是 DAG 啊!