系列导航:
Elastic Job是使用了zookeeper做注册中心的,那么job在zookeeper中到底都有哪些数据呢,现在,基本如图所示,接下来一一介绍。
[elastic-job-lite-springboot,log_dir event notification, dd-job, isr changenotification, zookeeper, admin, elastic-job-demo-quick-demo consumers cluster, [zk: localhost:2181(CONNECTED)4] ls /dd-job/ Command failed:java.lang.IllegalArgumentException: Path must not end with / character[zk: localhost:2181(CONNECTED) 5] ls /dd-job[demoSimpleSpringJob] zk:localhost:2181(CONNECTED) 61 ls /dd-iob/demoSimpleSpringJob [zk: localhost:2181(CONNECTED) 7] [config, instances, servers, sharding, leader]
注册中心数据结构
[zk:localhost:2181(CONNECTED)9]get/dd-job/demoSimpleSpringJob/config "iobName":"demoSimpleSprinaJob","iobClass":"example.MyElasticJob","iobType":"SIMPLE","cron":"0/10 * * * ?","shardingTotalCount":3,"shardingItemParameters":"0\u003dA,1\u003dB,2\u003dC","jobParameter":"","fai over":false,"misfire":true,"description":"","jobProperties":{"job_exception_handler" :"com.dangdang.ddframe e.job.executor.handler.impl.DefaultJobExceptionHandler","executor_service_handler": "com.dangdang.ddframe iob.executor.handler.impl.DefaultExecutorServiceHandler"},"monitorExecution":true,"maxTimeDiffSeconds":-1 monitorPort":-1."iobShardinaStrateavClass":""."reconcileTntervalMinutes":10."disabled":false."overwrit ":false} cZxid = 0xe87 ctime = Thu Jul 30 06:57:32 UTC 2020 mZxid = 0xe87 mtime = Thu jul 30 06:57:32 UTC 2020 pZxid = 0xe87 cversion = 0 dataVersion =0 aclVersion =日 ephemeralOwner = 0x0 dataLength =638 numChildren =0
注册中心在定义的命名空间下,创建作业名称节点,用于区分不同作业,所以作业一旦创建则不能修改作业名称,如果修改名称将视为新的作业。作业名称节点下又包含4个数据子节点,分别是config, instances, sharding, servers和leader。
config节点
作业配置信息,以JSON格式存储
[zk:localhost:2181(CONNECTED)10]get/dd-job/demoSimpleSpringJob/instances cZxid = 0xe94 ctime = Thu Jul 30 06:57:33 UTC 2020 mZxid = 0xe94 mtime = Thu Jul 30 06:57:33 UTC 2020 pZxid = 0xeac cversion =2 dataVersion =0 aclVersion =0 ephemeralOwner = 0x0 dataLength =0 numChildren =0 [zk: localhost:2181(CONNECTED)11
instances节点
作业运行实例信息,子节点是当前作业运行实例的主键。作业运行实例主键由作业运行服务器的IP地址和PID构成。作业运行实例主键均为临时节点,当作业实例上线时注册,下线时自动清理。注册中心监控这些节点的变化来协调分布式作业的分片以及高可用。 可在作业运行实例节点写入TRIGGER表示该实例立即执行一次。
[zk:localhost:2181(CONNECTED)10]get/dd-job/demoSimpleSpringJob/instances cZxid = 0xe94 ctime = Thu Jul 30 06:57:33 UTC 2020 mZxid = 0xe94 mtime = Thu Jul 30 06:57:33 UTC 2020 pZxid = 0xeac cversion =2 dataVersion =0 aclVersion =0 ephemeralOwner = 0x0 dataLength =0 numChildren =0 [zk: localhost:2181(CONNECTED)1
sharding节点
作业分片信息,子节点是分片项序号,从零开始,至分片总数减一。分片项序号的子节点存储详细信息。每个分片项下的子节点用于控制和记录分片运行状态。节点详细信息说明:
[zk:localhost:2181(CONNECTED)11]get/dd-job/demoSimpleSpringJob/sharding cZxid = 0xe9b ctime = Thu Jul 30 06:57:40 UTC 2020 mZxid = 0xe9b mtime = Thu Jul 30 06:57:40 UTC 2020 pZxid = 0xe9e cversion =3 dataVersion =0 aclVersion =日 ephemeralOwner = 0x0 dataLength =0 numChildren =3
子节点名 | 临时节点 | 描述 |
instance | 否 | 执行该分片项的作业运行实例主键 |
running | 是 | 分片项正在运行的状态 仅配置monitorExecution时有效 |
failover | 是 | 如果该分片项被失效转移分配给其他作业服务器,则此节点值记录执行此分片的作业服务器IP |
misfire | 否 | 是否开启错过任务重新执行 |
disabled | 否 | 是否禁用此分片项 |
servers节点
作业服务器信息,子节点是作业服务器的IP地址。可在IP地址节点写入DISABLED表示该服务器禁用。 在新的cloud native架构下,servers节点大幅弱化,仅包含控制服务器是否可以禁用这一功能。为了更加纯粹的实现job核心,servers功能未来可能删除,控制服务器是否禁用的能力应该下放至自动化部署系统。
zk:localhost:2181(CONNECTED)121 get/dd-iob/demoSimpleSpringJob/servers cZxid = 0xe90 ctime = Thu Jul 30 06:57:33 UTC 2020 mZxid = 0xe90 mtime = Thu Jul 30 06:57:33 UTC 2020 oZxid = 0xe91 cversion =1 dataVersion =0 aclVersion =0 ephemeralOwner = 0x0 dataLength =日 numChildren =1
leader节点
作业服务器主节点信息,分为election,sharding和failover三个子节点。分别用于主节点选举,分片和失效转移处理。
leader节点是内部使用的节点,如果对作业框架原理不感兴趣,可不关注此节点。
[zk:localhost:2181(CONNECTED)13]get/dd-job/demoSimpleSpringJob/leader cZxid = 0xe89 ctime = Thu Jul 30 06:57:33 UTC 2020 mZxid = 0xe89 mtime = Thu jul 30 06:57:33 UTC 2020 oZxid = 0xe96 cversion =2 dataVersion =0 aclVersion =日 ephemeralOwner =0x0 dataLength =0 numChildren =2
子节点名 | 临时节点 | 描述 |
election\instance | 是 | 主节点服务器IP地址 一旦该节点被删除将会触发重新选举 重新选举的过程中一切主节点相关的操作都将阻塞 |
election\latch | 否 | 主节点选举的分布式锁 为curator的分布式锁使用 |
sharding\necessary | 否 | 是否需要重新分片的标记 如果分片总数变化,或作业服务器节点上下线或启用/禁用,以及主节点选举,会触发设置重分片标记 作业在下次执行时使用主节点重新分片,且中间不会被打断 作业执行时不会触发分片 |
sharding\processing | 是 | 主节点在分片时持有的节点 如果有此节点,所有的作业执行都将阻塞,直至分片结束 主节点分片结束或主节点崩溃会删除此临时节点 |
failover\items\分片项 | 否 | 一旦有作业崩溃,则会向此节点记录 当有空闲作业服务器时,会从此节点抓取需失效转移的作业项 |
failover\items\latch | 否 | 分配失效转移分片项时占用的分布式锁 为curator的分布式锁使用 |