首页/数据/数据工程与 ETL 速查/XXL-JOB 分布式任务调度

XXL-JOB 分布式任务调度

XXL-JOB 面向 Java 应用:调度中心统一管理任务,执行器以 SDK 方式内嵌在业务应用里注册上报;支持 cron、分片广播、失败重试与 GLUE 在线编辑执行逻辑。

XXL-JOB 是什么

XXL-JOB 是面向 Java 应用的分布式任务调度平台,架构上分两块:调度中心(独立部署的控制台,负责任务配置、触发与日志查看)与执行器(业务应用引入 xxl-job-core 后内嵌注册上报)。它支持 cron 触发、固定速率、分片广播、失败重试与告警,还能用 GLUE 模式在线编辑 Shell、Python 等执行逻辑,改完立即生效。适合业务系统内部定时任务统一管理,尤其是需要与 Java 应用同一进程读写业务数据的场景。

基本信息

架构组成调度中心(控制台)加执行器(业务应用内嵌)
注册方式执行器启动后向调度中心注册,心跳维持在线
触发方式cron、固定速率、手动触发、父子任务
路由策略轮询、随机、一致性哈希、分片广播、故障转移
GLUE 模式在线编辑 Shell、Python 等执行逻辑,保存即生效

典型使用场景

  • 业务系统内的定时任务统一管理:日终对账、订单超时关闭、报表生成
  • 大批数据并行处理:分片广播把数据按分片键拆给多台执行器
  • Java 应用与数据库同进程读写:避免跨系统取数的网络与权限开销
  • 临时脚本类任务:用 GLUE 在线改逻辑,不用重新发布应用
  • 故障转移:执行器节点宕机时把任务调度到在线节点

执行器配置

执行器配置
xxl.job.admin.addresses=http://xxl-job-admin:8080/xxl-job-admin
xxl.job.executor.appname=order-executor
xxl.job.executor.port=9999
xxl.job.accessToken=***            # 与调度中心保持一致,否则注册失败
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
xxl.job.executor.logretentiondays=30

# 要点一:appname 要与调度中心创建的执行器名称一致
# 要点二:logpath 建议挂载持久卷,容器重启后日志不丢
# 要点三:日志保留天数按排障周期设置,默认过短会丢历史

路由策略对照

策略行为适用场景注意点
轮询依次选在线执行器任务可重复执行且无状态需保证任务幂等
随机随机选一台负载分散仍要求无状态
一致性哈希按参数固定到某台需要按业务键顺序处理节点变更会重新分配
分片广播所有执行器都执行,各拿分片序号大批量并行处理代码要按分片参数过滤数据
故障转移失败后切到其他节点对成功率要求高可能产生重复执行
分片广播模式下每个执行器拿到自己的分片序号与总分片数,可把大批数据拆给多台机器并行处理,处理时务必按分片条件过滤,否则每台都处理全量。
执行器与调度中心的 accessToken 不一致时注册失败,现象不明显(控制台看不到执行器),排查时先核对这一项。
任务日志默认写本地磁盘,容器化部署时不挂持久卷就会随重启丢失,排障时只能靠业务表反推执行情况。

易错点

  • accessToken 不一致导致执行器注册失败,控制台看不到节点却没人注意
  • 任务日志写容器本地磁盘未挂盘,重启后历史执行记录全部丢失
  • 分片广播任务未按分片参数过滤数据,每台执行器都处理全量,产生重复写入
  • 路由策略选了故障转移但任务不幂等,重试造成数据重复;对账类任务尤其明显

数据来源与参考

  • XXL-JOB 官方文档:架构设计与执行器配置(xuxueli/xxl-job)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌