1.ejob集成
1.1添加Pom
1.2任务类型
任务类型有三种:
SimpleJob
SimpleJob:简单实现,未经任何封装的类型。需实现SimpleJob接口。
DataFlowJob
DataFlowJob:Dataflow类型用于处理数据流,必须实现fetchData()和processData()的方法,一个用来获取数据,一个用来处理获取到的数据。
ScriptJob
Script:Script类型作业意为脚本类型作业,支持shell,python,perl等所有类型脚本。
2.ejob配置
作业配置分为3级,分别是JobCoreConfiguration,JobTypeConfiguration和LiteJobConfiguration。
LiteJobConfiguration使用JobTypeConfiguration,JobTypeConfiguration使用JobCoreConfiguration,
层层嵌套。
JobTypeConfiguration根据不同实现类型分为SimpleJobConfiguration,DataflowJobConfiguration和ScriptJobConfiguration。E-Job使用ZK来做分布式协调,所有的配置都会写入到ZK节点。
3.ZK注册中心数据结构
一个任务一个二级节点。
这里面有些节点是临时节点,只有任务运行的时候才能看到。注意:修改了任务重新运行任务不生效,是因为ZK的信息不会更新,除非把overwrite修改成true。
config节点
JSON格式存储。
存储任务的配置信息,包含执行类,cron表达式,分片算法类,分片数量,分片参数等等。
config节点的数据是通过ConfigService持久化到zookeeper中去的。默认状态下,如果你修改了Job
的配置比如cron表达式、分片数量等是不会更新到zookeeper上去的,除非你在Lite级别的配置把参数
overwrite修改成true。
instances节点
同一个Job下的elastic-job的部署实例。一台机器上可以启动多个Job实例,也就是Jar包。instances的命名是IP+@-@+PID。只有在运行的时候能看到。
leader节点
任务实例的主节点信息,通过zookeeper的主节点选举,选出来的主节点信息。在elasticjob中,任务的执行可以分布在不同的实例(节点)中,但任务分片等核心控制,需要由主节点完成。因此,任务执行前,需要选举出主节点。下面有三个子节点:election:主节点选举sharding:分片failover:失效转移election下面的instance节点显示了当前主节点的实例ID:jobInstanceId。election下面的latch节点也是一个永久节点用于选举时候的实现分布式锁。sharding节点下面有一个临时节点,necessary,是否需要重新分片的标记。如果分片总数变化,或任务实例节点上下线或启用/禁用,以及主节点选举,都会触发设置重分片标记,主节点会进行分片计算。
servers节点
任务实例的信息,主要是IP地址,任务实例的IP地址。跟instances不同,如果多个任务实例在同一台机器上运行则只会出现一个IP子节点。可在IP地址节点写入DISABLED表示该任务实例禁用。
sharding节点
任务的分片信息,子节点是分片项序号,从0开始。分片个数是在任务配置中设置的。分片项序号的子节点存储详细信息。每个分片项下的子节点用于控制和记录分片运行状态。最主要的子节点就是i
nstance。