elastic-job(通过zookeeper管理元数据)

2024-05-30 18:48

本文主要是介绍elastic-job(通过zookeeper管理元数据),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

任务名称:
       namespace
    /elastic-job-demo
            |---------demoSimpleJob1
                            |-------------leader
                                             |-----election
                                                        |--------instance[领导者]    
                                                        |
                                                        |--------latch[选举]
                                                        
                                             |-----sharding
                                                        |--------processing
                                                        |
                                                        |--------necessary[是否需要分片标识]     

                                             |-----failover
                                                        |
                                                        |--------latch
                                                        |                
                                                        |--------items(failover分片)
                                                                   |
                                                                   |-------0   failover分片1
                                                                   |
                                                                   |-------1   failover分片2                                                               

                                                        
                            |-------------servers(机器ip相关节点)
                                             | 
                                             |---------ip1  
                                             |                                             
                                             |---------ip2
                                             |
                                             |---------ip3
                                             |
                                             |---------ip4
                                             
                                             
                                             
                                             
                            |-------------config(作业配置信息,json数据)
                            |
                            |
                            |-------------instances(运行实例节点)
                                             |
                                             | 
                                             |
                                             |----------------------ip1+进程号
                                             |
                                             |
                                             |----------------------ip2+进程号
                                             
                                             
                                             
                            |-------------sharding
                                              |----------1(分片1)
                                                           |
                                                           |
                                                           |---------running:运行标识,临时节点
                                                           |
                                                           |---------instance:该分片执行的instaceid
                                                           |
                                                           |---------misfire:错过运行标识
                                                           |
                                                           |---------failover:failover标识,存储运行该failover分片的instanceid
                                                           |
                                                           |---------disable:分片是否有效
                                                           
                                                           
                                                           
                                                           
                                                           
                                              |----------2(分片2)                                               
            |---------demoSimpleJob2
            |---------demoSimpleJob3


任务重新分片只是解决了下次任务执行时,所有的分片任务都是分布到各个实例中,但是当前失效的任务是如何处理的。

失效转移。Failover:在执行任务的过程中遇见异常的情况,这个分片任务可以在其他节点再次执行。

首先,在某个任务实例elastic-job会在leader节点下面创建failover节点以及items节点。
items节点下会有失效任务实例的原本应该做好的分片。

处理步骤:

   1、每个分片id写到/jobName/leader/failover/items
   
        条件一:${JOB_NAME}/leader/failover/items/${ITEM_ID} 有失效转移的作业分片项。

        条件二:当前作业不在运行中。此条件即是上文提交的作业节点空闲的定义。

        失效转移: 运行中的作业服务器崩溃不会导致重新分片,只会在下次作业启动时分片。
                   启用失效转移功能可以在本次作业执行过程中,监测其他作业服务器【空闲】,抓取未完成的孤儿分片项执行。
           
在FailoverLeaderExecutionCallback中回调逻辑如下:

(1)也会首先判断是否需要失效转移,

(2)从注册中心获得一个 `${JOB_NAME}/leader/failover/items/${ITEM_ID}` 作业分片项,

(3)在注册中心注册节点`${JOB_NAME}/sharding/${ITEM_ID}/failover` 作业分片项为当前作业节点,

(4)然后移除任务转移分片项,【${JOB_NAME}/leader/failover/items/${ITEM_ID}】

(5)最后调用执行,提交任务    

   // 获得一个 `${JOB_NAME}/leader/failover/items/${ITEM_ID}` 作业分片项
   int crashedItem = Integer.parseInt(jobNodeStorage.getJobNodeChildrenKeys(FailoverNode.ITEMS_ROOT).get(0));
   log.debug("Failover job '{}' begin, crashed item '{}'", jobName, crashedItem);
   // 设置这个 `${JOB_NAME}/sharding/${ITEM_ID}/failover` 作业分片项 为 当前作业节点
   jobNodeStorage.fillEphemeralJobNode(FailoverNode.getExecutionFailoverNode(crashedItem), JobRegistry.getInstance().getJobInstance(jobName).getJobInstanceId());
   // 移除这个 `${JOB_NAME}/leader/failover/items/${ITEM_ID}` 作业分片项
   jobNodeStorage.removeJobNodeIfExisted(FailoverNode.getItemsNode(crashedItem));
   // TODO 不应使用triggerJob, 而是使用executor统一调度 疑问:为什么要用executor统一,后面研究下
   // 触发作业执行
   JobScheduleController jobScheduleController = JobRegistry.getInstance().getJobScheduleController(jobName);
   if (null != jobScheduleController) {
       jobScheduleController.triggerJob();
   }       

这篇关于elastic-job(通过zookeeper管理元数据)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1016718

相关文章

用Microsoft.Extensions.Hosting 管理WPF项目.

首先引入必要的包: <ItemGroup><PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" /><PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" /><PackageReference Include="Serilog

关于如何更好管理好数据库的一点思考

本文尝试从数据库设计理论、ER图简介、性能优化、避免过度设计及权限管理方面进行思考阐述。 一、数据库范式 以下通过详细的示例说明数据库范式的概念,将逐步规范化一个例子,逐级说明每个范式的要求和变换过程。 示例:学生课程登记系统 初始表格如下: 学生ID学生姓名课程ID课程名称教师教师办公室1张三101数学王老师101室2李四102英语李老师102室3王五101数学王老师101室4赵六103物理陈

【服务器运维】MySQL数据存储至数据盘

查看磁盘及分区 [root@MySQL tmp]# fdisk -lDisk /dev/sda: 21.5 GB, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical)

springboot家政服务管理平台 LW +PPT+源码+讲解

3系统的可行性研究及需求分析 3.1可行性研究 3.1.1技术可行性分析 经过大学四年的学习,已经掌握了JAVA、Mysql数据库等方面的编程技巧和方法,对于这些技术该有的软硬件配置也是齐全的,能够满足开发的需要。 本家政服务管理平台采用的是Mysql作为数据库,可以绝对地保证用户数据的安全;可以与Mysql数据库进行无缝连接。 所以,家政服务管理平台在技术上是可以实施的。 3.1

SQL Server中,查询数据库中有多少个表,以及数据库其余类型数据统计查询

sqlserver查询数据库中有多少个表 sql server 数表:select count(1) from sysobjects where xtype='U'数视图:select count(1) from sysobjects where xtype='V'数存储过程select count(1) from sysobjects where xtype='P' SE

探索Elastic Search:强大的开源搜索引擎,详解及使用

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选,相信大家多多少少的都听说过它。它可以快速地储存、搜索和分析海量数据。就连维基百科、Stack Overflow、

数据时代的数字企业

1.写在前面 讨论数据治理在数字企业中的影响和必要性,并介绍数据治理的核心内容和实践方法。作者强调了数据质量、数据安全、数据隐私和数据合规等方面是数据治理的核心内容,并介绍了具体的实践措施和案例分析。企业需要重视这些方面以实现数字化转型和业务增长。 数字化转型行业小伙伴可以加入我的星球,初衷成为各位数字化转型参考库,星球内容每周更新 个人工作经验资料全部放在这里,包含数据治理、数据要

vue3项目将所有访问后端springboot的接口统一管理带跨域

vue3项目将所有访问后端springboot的接口统一管理带跨域 一、前言1.安装Axios2.创建Axios实例3.创建API服务文件4.在组件中使用API服务 二、跨域三、总结 一、前言 在Vue 3项目中,统一管理所有访问后端Spring Boot接口的最佳实践是创建一个专门的API服务层。这可以让你的代码更加模块化、可维护和集中管理。你可以使用Axios库作为HTT

如何在Java中处理JSON数据?

如何在Java中处理JSON数据? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨在Java中如何处理JSON数据。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,在现代应用程序中被广泛使用。Java通过多种库和API提供了处理JSON的能力,我们将深入了解其用法和最佳

两个基因相关性CPTAC蛋白组数据

目录 蛋白数据下载 ①蛋白数据下载 1,TCGA-选择泛癌数据  2,TCGA-TCPA 3,CPTAC(非TCGA) ②蛋白相关性分析 1,数据整理 2,蛋白相关性分析 PCAS在线分析 蛋白数据下载 CPTAC蛋白组学数据库介绍及数据下载分析 – 王进的个人网站 (jingege.wang) ①蛋白数据下载 可以下载泛癌蛋白数据:UCSC Xena (xena