曾经相遇,总胜过从未碰头
Elastic-Job 是一款基于 ZooKeeper 和 Quartz 实现的分布式任务调度框架,它提供了分片处理和分布式任务调度能力。
在Elastic-Job中,Zookeeper扮演了作业协调与元数据管理的角色。它主要负责以下几个方面的功能:
作业配置管理:Zookeeper存储了作业的配置信息,例如作业名称、Cron表达式、分片数量等。当Elastic-Job启动时,它会从Zookeeper中读取作业配置,并根据配置来执行作业。
作业执行器发现与注册:当一个作业执行器启动时,它会将自己的信息注册到Zookeeper中。这些信息包括执行器的IP地址、端口号等。通过Zookeeper,Elastic-Job可以发现所有可用的作业执行器,并根据负载均衡策略为作业分配执行器。
分片信息管理:Zookeeper存储了作业的分片信息,包括分片项、分片参数等。Elastic-Job会根据分片信息将作业拆分成多个独立的部分,并将这些部分分发到不同的作业执行器上进行处理。
作业执行状态监控:Zookeeper可以实时监控作业的执行状态,例如作业是否正在执行、作业执行的进度等。通过Zookeeper,用户可以获取作业的实时状态,以便对作业进行监控和管理。
作业故障恢复:当一个作业执行器发生故障时,Zookeeper可以检测到该执行器的失效,并自动将其承担的分片重新分配给其他可用的执行器。这样,即使某个执行器发生故障,作业仍然可以继续执行。
分布式锁:Zookeeper提供了分布式锁功能,确保同一时间只有一个作业执行器在执行作业。这可以防止作业被多次执行,以及避免因并发执行导致的数据不一致问题。
总之,Zookeeper在Elastic-Job中扮演了一个非常重要的角色。它负责作业配置管理、作业执行器发现与注册、分片信息管理、作业执行状态监控、作业故障恢复和分布式锁等功能,使得Elastic-Job可以实现分布式任务调度的高可用、高性能和弹性伸缩。
在Elastic-Job中,分片节点和作业执行器节点都是在Zookeeper注册中心中创建的节点。它们是用于存储作业相关信息和协调作业执行器之间的协作的。
分片节点用于存储作业的分片信息,包括分片项、分片参数等。当作业启动时,Elastic-Job会在Zookeeper注册中心中创建相应的分片节点。作业执行器会根据分片节点的信息来获取自己需要处理的分片。
分片节点的结构如下:
/elastic-job-demo/sharding
├─0
└─1
上述结构中,/elastic-job-demo
是作业的根节点,sharding
是分片节点的父节点,0
和1
分别表示分片项0和分片项1。
作业执行器节点用于存储作业执行器的信息,包括执行器的IP地址、端口号等。当作业执行器启动时,它会在Zookeeper注册中心中创建相应的执行器节点,并通过心跳机制向注册中心报告自己的状态。
作业执行器节点的结构如下:
/elastic-job-demo/instances
├─192.168.1.2@-@0
└─192.168.1.3@-@1
上述结构中,/elastic-job-demo
是作业的根节点,instances
是作业执行器节点的父节点,192.168.1.2@-@0
和192.168.1.3@-@1
分别表示IP地址为192.168.1.2
和192.168.1.3
的作业执行器。@-@
是分隔符,后面的数字表示分片项。
总结一下,分片节点和作业执行器节点都是在Zookeeper注册中心中创建的节点,用于存储作业的分片信息和执行器信息。这些节点在Elastic-Job的分布式任务调度过程中起到协调作业执行器之间的协作作用。
在Elastic-Job中,作业故障恢复是通过Zookeeper实现的。当一个作业执行器发生故障时,Zookeeper可以检测到该执行器的失效,并触发相应的故障恢复机制。具体来说,这个过程包括以下几个步骤:
心跳检测:每个作业执行器都会定期向Zookeeper发送心跳信息,表明自己仍然处于活动状态。当某个执行器发生故障时,它将无法继续发送心跳信息。Zookeeper会监控所有执行器的心跳,并根据心跳超时时间来判断执行器是否失效。
故障检测:当Zookeeper检测到某个执行器的心跳超时时,它会认为该执行器已失效,并触发故障恢复机制。Zookeeper会删除失效执行器在注册中心的相关信息,以便Elastic-Job可以重新分配作业。
重新分配分片:在失效执行器被移除之后,Zookeeper会将其承担的分片重新分配给其他可用的执行器。Elastic-Job会根据负载均衡策略为每个分片选择一个新的执行器。重新分配分片的过程可能会导致作业的短暂中断,但这通常不会影响作业的整体执行。
作业恢复执行:当分片被重新分配到新的执行器后,Elastic-Job会立即在新执行器上启动作业。这样,即使某个执行器发生故障,作业仍然可以继续执行。
通过这种机制,Elastic-Job实现了作业的故障恢复。当一个执行器发生故障时,Zookeeper会检测到故障并触发故障恢复机制,将失效执行器的分片重新分配给其他可用的执行器。这样,作业可以在发生故障的情况下仍然继续执行,提高了作业的可靠性和可用性。
作业故障恢复依赖于Zookeeper的监听机制。在Elastic-Job中,作业执行器在Zookeeper中注册时会创建临时节点。这些临时节点与执行器的会话相关联,当执行器与Zookeeper失去连接时,临时节点将被自动删除。
Zookeeper的监听器会监控这些临时节点的状态。当某个临时节点被删除时,监听器会触发相应的故障恢复逻辑。具体来说,这个过程包括以下几个步骤:
这种基于Zookeeper监听器的机制使得Elastic-Job能够在作业执行器发生故障时实现故障恢复。通过监听临时节点的状态变化,Elastic-Job可以及时发现失效的执行器,并将其承担的分片重新分配给其他可用的执行器,从而确保作业在故障发生时仍然可以继续执行。