ElasticJob 的工作原理
·
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负责分片”的分布式任务系统。
更多推荐




所有评论(0)