ElasticJob 的工作原理可以用一句话概括:

基于 ZooKeeper 的“注册 + 选主 + 分片 + 调度执行”分布式任务体系。

下面按面试最清晰的逻辑拆开讲。


1. 总体架构原理(先建立全局图)

ElasticJob 主要由三部分组成:

业务节点(Job执行器)
        ↓
ZooKeeper(协调中心)
        ↓
调度控制(Job Scheduler)

核心思想:

所有节点不直接通信,而是通过 ZooKeeper 协调


2. 工作流程(核心)

✔ 第一步:节点注册

所有 Job 实例启动后:

向 ZooKeeper 注册自己

注册信息包括:

  • Job 名称
  • 节点 IP
  • 分片能力
  • 执行状态

✔ 第二步:选主(Leader Election)

ZooKeeper 会自动选出一个:

Leader 节点(主节点)

作用:

  • 负责任务分片
  • 负责调度协调
  • 监控任务执行

👉 其他节点是 Worker


✔ 第三步:任务分片(核心能力)

假设:

3个节点
1个任务
1000条数据

Leader 会计算:

分片规则:
节点A → 0~333
节点B → 333~666
节点C → 666~1000

然后写入 ZooKeeper:

sharding info

✔ 第四步:任务触发

触发方式有两种:

① Cron 定时触发

类似 Quartz cron

② 手动触发


✔ 第五步:分发执行

每个节点只执行自己的分片:

public void execute(ShardingContext context) {

    int item = context.getShardingItem();

    // 只处理自己的分片数据
}

✔ 第六步:执行状态回传

执行结果会上报 ZooKeeper:

成功 / 失败 / 重试

3. ElasticJob 的核心机制(面试重点)


✔ 1)注册中心(ZooKeeper)

Apache ZooKeeper 作用:

  • 服务发现
  • 分布式锁
  • Leader 选举
  • 分片管理

✔ 2)分片机制(核心差异点)

ElasticJob 的本质优势:

把一个任务拆成多个子任务并行执行

支持:

  • Hash 分片
  • 范围分片
  • 自定义分片策略

✔ 3)弹性扩容

新增机器:

自动重新分片

无需人工干预


✔ 4)去中心化架构

特点:

  • 没有单点调度器
  • 每个节点都能参与调度
  • ZK负责协调

4. 完整执行链路(重点记这个)

Job启动
   ↓
注册ZooKeeper
   ↓
选出Leader
   ↓
Leader计算分片
   ↓
写入ZK分片信息
   ↓
触发任务执行
   ↓
各节点执行自己的分片
   ↓
结果回写ZK

5. 和 Quartz 本质区别(面试必问)

对比 Quartz ElasticJob
架构 DB中心化 ZK去中心化
调度方式 抢数据库锁 Leader协调
扩展性 一般 很强
分片能力
适用场景 业务任务 大数据任务

6. 一句话理解(非常重要)

ElasticJob 的本质是:“ZooKeeper负责协调,节点负责执行,Leader负责分片”的分布式任务系统。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐