面试知识库
进阶

分布式定时任务#

一句话答案#

XXL-JOB(轻量可视化,推荐)/ ElasticJob(基于 ZK)实现分布式定时任务,支持分片/故障转移/执行日志。

核心要点

方案对比:

方案特点
XXL-JOB轻量/可视化/社区活跃(推荐)
ElasticJob基于ZK/分片策略丰富
Quartz集群数据库锁协调/功能基础

核心能力: 任务分片 / 故障转移 / 可视化调度 / 执行日志

面试回答(2分钟版)

在集群环境下,如果用 Spring 自带的 @Scheduled,每台机器都会执行一遍同样的任务,导致重复执行。所以我们需要分布式定时任务框架来做统一调度。我在项目中用的是 XXL-JOB,它的架构分为调度中心和执行器两部分:调度中心负责任务的分配和触发,执行器部署在各个应用实例上负责实际执行。它支持任务分片,比如一个大数据量的任务可以按 ID 取模分成多片并行处理,大幅提升效率。还支持故障转移,某个执行器挂了会自动把任务转给其他节点。另外它有完善的可视化控制台,可以查看执行日志、手动触发、暂停任务。和 ElasticJob 相比,XXL-JOB 更轻量,不依赖 ZooKeeper,社区也更活跃。要注意分布式定时任务和 MQ 的场景不同,定时任务是时间驱动,MQ 是事件驱动。

追问与易错

追问方向:

  • “XXL-JOB 分片原理?”→ 调度中心将任务按分片参数(如 shardIndex/shardTotal)分发给多个执行器实例,每个实例根据自己的分片号处理对应数据段(如 id % shardTotal == shardIndex),实现并行处理
  • “执行失败怎么重试?”→ XXL-JOB 支持配置失败重试次数和重试间隔,也支持故障转移模式(failover)自动转移到其他执行器节点重试;业务层也要保证任务幂等,防止重试导致重复执行
  • “和 MQ 区别?”→ 定时任务是时间驱动(按 Cron 表达式周期执行),MQ 是事件驱动(有消息就消费);定时任务适合批处理/对账/报表等周期性场景,MQ 适合实时异步解耦场景

易错点:

  • ❌ 用 @Scheduled 就够——集群多实例重复执行
  • ❌ 能替代 MQ——场景不同