分布式定时任务:Elastic-Job-Lite

Elastic-Job-Lite 是一款由 Apache 开源的轻量级分布式任务调度框架,属于 ShardingSphere 生态体系的一部分。它专注于分布式任务调度,支持弹性伸缩、分片处理、高可用等特性,且不依赖中心化架构。

一、基础

(一)核心特性
  1. 分布式协调
    通过 ZooKeeper 实现作业的分布式调度和协调,确保任务在集群环境中不重复、不遗漏地执行。

  2. 分片机制
    支持将任务拆分为多个分片(Sharding)并行执行,提升处理效率。例如:

    // 根据分片参数处理不同数据
    int shardIndex = context.getShardingItem();  // 分片索引(0,1,2...)
    String shardParam = context.getShardingParameter();  // 分片参数
    
  3. 弹性伸缩
    动态感知集群节点变化,自动重新分配分片。新增节点时,分片会被均匀分配到新节点;节点下线时,其分片会被其他节点接管。

  4. 多种作业类型

    • SimpleJob:简单任务,实现 SimpleJob 接口即可。
    • DataflowJob:数据流任务,支持数据抓取(fetch)和处理(process)。
    • ScriptJob:脚本任务,支持 Shell、Python 等脚本语言。
  5. 失效转移
    当作业节点崩溃时,正在执行的分片会被转移到其他节点继续执行。

  6. 幂等性保障
    通过 ZooKeeper 实现分布式锁,确保同一分片在同一时间只被一个节点执行。

(二)架构设计

Elastic-Job-Lite 采用去中心化架构:

  • 作业节点:直接部署在应用中,既是执行节点也是调度节点。
  • 注册中心:依赖 ZooKeeper 存储作业元数据和运行状态。
  • 无中心化调度器:每个节点通过注册中心协调,无需单独的调度中心。
(三)核心概念
  1. 作业(Job)
    任务的抽象,支持 Simple、Dataflow、Script 三种类型。

  2. 分片(Sharding)
    将任务拆分为多个独立的子任务,每个分片由不同的节点执行。例如:

    elasticjob:jobs:myJob:sharding-total-count: 3  # 总分片数sharding-item-parameters: "0=北京,1=上海,2=广州"  # 分片参数
    
  3. 注册中心(Registry Center)
    ZooKeeper 作为协调服务,存储作业配置、运行状态和分片信息。

  4. 作业实例(Job Instance)
    每个作业节点启动时会向注册中心注册自己,成为一个作业实例。

二、在springboot中使用Elastic-Job-Lite

(一)添加依赖

pom.xml 中添加 Elastic-Job-Lite 和 ZooKeeper 客户端依赖:

<!-- Elastic-Job-Lite Spring Boot Starter -->
<dependency><groupId>org.apache.shardingsphere.elasticjob</groupId><artifactId>elasticjob-lite-spring-boot-starter</artifactId><version>3.0.3</version> <!-- 最新稳定版本 -->
</dependency><!-- ZooKeeper 客户端 -->
<dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>5.3.0</version>
</dependency>
(二) 配置 ZooKeeper 注册中心

你提到的没错!Elastic-Job-Lite 配置 ZooKeeper 确实有三种主要方式,我之前的回答集中在 Java 代码配置 上。现在我补充完整另外两种方式:

1.YAML 配置(Spring Boot 自动配置)

最简洁的方式,通过 application.yml 配置:

elasticjob:reg-center:server-lists: localhost:2181  # ZooKeeper 地址namespace: elastic-job        # 命名空间base-sleep-time-milliseconds: 1000  # 初始重试等待时间max-sleep-time-milliseconds: 3000  # 最大重试等待时间max-retries: 3                # 最大重试次数digest: ""                    # 认证信息(可选)jobs:mySimpleJob:type: SIMPLEclass: com.example.job.MySimpleJob  # 作业类路径cron: "0/10 * * * * ?"              # Cron 表达式sharding-total-count: 3             # 分片总数sharding-item-parameters: "0=A,1=B,2=C"  # 分片参数overwrite: true                     # 覆盖注册中心配置

关键点

  • elasticjob.reg-center 配置 ZooKeeper 连接信息。
  • elasticjob.jobs 下定义具体作业,支持 SIMPLEDATAFLOWSCRIPT 等类型。
2.Java 代码配置(手动构建 Bean)

前面示例中使用的方式,适合需要灵活控制配置的场景:

@Configuration
public class JobConfig {@Bean(initMethod = "init")public ZookeeperRegistryCenter regCenter() {ZookeeperConfiguration zkConfig = new ZookeeperConfiguration("localhost:2181", "elastic-job");return new ZookeeperRegistryCenter(zkConfig);}@Bean(initMethod = "init")public SpringJobScheduler simpleJobScheduler(MySimpleJob mySimpleJob, ZookeeperRegistryCenter regCenter) {JobCoreConfiguration coreConfig = JobCoreConfiguration.newBuilder("mySimpleJob", "0/10 * * * * ?", 3).shardingItemParameters("0=A,1=B,2=C").build();SimpleJobConfiguration jobConfig = new SimpleJobConfiguration(coreConfig, MySimpleJob.class.getCanonicalName());return new SpringJobScheduler(mySimpleJob, regCenter, LiteJobConfiguration.newBuilder(jobConfig).overwrite(true).build());}
}

关键点

  • 手动创建 ZookeeperRegistryCenterSpringJobScheduler Bean。
  • 通过 JobCoreConfigurationSimpleJobConfiguration 构建作业配置。
(三)创建简单作业类

实现 SimpleJob 接口,定义作业逻辑:

import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import org.springframework.stereotype.Component;@Component
public class MySimpleJob implements SimpleJob {@Overridepublic void execute(ShardingContext shardingContext) {// 获取分片信息int shardIndex = shardingContext.getShardingItem();String shardParam = shardingContext.getShardingParameter();// 作业逻辑(根据分片参数处理不同数据)System.out.printf("分片项: %d, 参数: %s, 时间: %s%n", shardIndex, shardParam, System.currentTimeMillis());// 示例:根据分片处理不同的数据// if (shardIndex == 0) { processGroupA(); }// else if (shardIndex == 1) { processGroupB(); }}
}
(四)配置作业

使用 @ElasticSimpleJob 注解配置作业:

import com.dangdang.ddframe.job.config.simple.SimpleJobConfiguration;
import com.dangdang.ddframe.job.lite.config.LiteJobConfiguration;
import com.dangdang.ddframe.job.lite.spring.api.SpringJobScheduler;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
import org.apache.shardingsphere.elasticjob.api.ElasticSimpleJob;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class JobConfig {@Autowiredprivate ZookeeperRegistryCenter regCenter;@Autowiredprivate MySimpleJob mySimpleJob;@Bean(initMethod = "init")public SpringJobScheduler simpleJobScheduler() {// 定义作业核心配置JobCoreConfiguration coreConfig = JobCoreConfiguration.newBuilder("mySimpleJob",      // 作业名称"0/10 * * * * ?",   // Cron 表达式3                   // 分片总数).shardingItemParameters("0=A,1=B,2=C")  // 分片参数.build();// 定义 Simple 作业配置SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(coreConfig, MySimpleJob.class.getCanonicalName());// 定义 Lite 作业配置LiteJobConfiguration jobConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).overwrite(true)  // 允许覆盖注册中心配置.build();// 创建作业调度器return new SpringJobScheduler(mySimpleJob, regCenter, jobConfig);}
}
(五)配置说明
参数说明
reg-center.server-listsZooKeeper 服务器地址,多个地址用逗号分隔(如 host1:2181,host2:2181
reg-center.namespace命名空间,用于隔离不同项目的作业配置
coreConfig.cronCron 表达式,定义作业执行时间规则
coreConfig.shardingTotalCount分片总数,决定作业拆分为多少个并行执行单元
coreConfig.shardingItemParameters分片参数,格式为 0=A,1=B,2=C,为每个分片指定参数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/87470.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/87470.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录一次生产环境ActiveMQ无法启动的问题

这次遇到一个问题&#xff0c;是ActiveMQ无法启动的&#xff0c;跟以往的现象不一样。这次是在服务器重启后出异常。 1、启动ActiveMQ时提示&#xff1a;activemq/data/kahadb/db.data&#xff08;输入输出错误&#xff09;&#xff0c;NotFoundFileException异常 2、想着不应该…

大型语言模型幻觉检测相关综述

背景 1.1 幻觉检测的定义与范围 大型语言模型&#xff08;LLMs&#xff09;中的幻觉检测 是指系统性地识别由LLMs生成的事实错误或无意义输出的任务&#xff0c;而无需依赖外部证据 [Li et al., 2024; Zhang et al., 2024]。这项任务对于确保LLM生成内容的可靠性和可信度至关…

Python爬虫与数据可视化教程

对于经常写爬虫的技术来说了&#xff0c;可视化大大的提高工作效率&#xff0c;可以让获取的数据更直观的展示在面前&#xff0c;下面我将通过具体实操给大家展示下多种可视化具体教程&#xff0c;希望能都帮助大家。 下面是一个完整的Python爬虫和数据可视化解决方案&#xff…

【GHS】Green Hills软件MULTI-IDE的安装教程

前言&#xff1a;MULTI-IDE作为一款Green Hills开发的支持C/C、Ada等语言的嵌入式开发环境&#xff0c;由于其优异的性能&#xff0c;所以在汽车电子软件的开发中占有重要地位。但是这款IDE需要付费使用&#xff0c;对于个人学习而言不太友好&#xff0c;所以这里介绍一款PJ版本…

Web攻防-文件上传黑白名单MIMEJS前端执行权限编码解析OSS存储分域名应用场景

知识点&#xff1a; 1、WEB攻防-文件上传-前端&黑白名单&MIME&文件头等 2、WEB攻防-文件上传-执行权限&解码还原&云存储&分站等 3、WEB攻防-文件上传-JS提取&特定漏洞&第三方编辑器 4、WEB攻防-文件上传-思维导图形成 常规文件上传&#xff1a…

Odoo系统大型业务优化实战

目录 背景说明ORM与模型优化数据量处理策略接口与报表优化系统架构优化监控与诊断工具项目实战总结&#xff08;案例&#xff09;后续优化建议性能优化检查清单总结 一、背景说明 在 Odoo 项目中&#xff0c;随着业务不断扩展&#xff0c;系统常常面临如下挑战&#xff1a; …

【2.4 漫画SpringBoot实战】

🚀 漫画SpringBoot实战 🎯 学习目标:掌握SpringBoot企业级开发,从零到一构建现代化Java应用 📋 目录 SpringBoot核心特性自动配置原理Web开发实战数据访问与事务监控与部署🎭 漫画引言 小明: “为什么SpringBoot这么受欢迎?” 架构师老王: “SpringBoot就像全自动…

美国站群服务器的优势和应用与选择指南

在当今数字化时代&#xff0c;互联网业务的蓬勃发展促使各类企业和个人不断寻求高效、稳定且功能强大的网络解决方案。美国站群服务器作为一种备受瞩目的网络基础设施&#xff0c;正逐渐成为众多从事跨境电商、搜索引擎优化&#xff08;SEO&#xff09;、内容分发、数据采集等业…

智能合约基础:Solidity语法速成

目录 智能合约基础:Solidity语法速成引言:区块链的可编程世界1. Solidity基础语法1.1 合约结构1.2 数据类型2. 核心概念详解2.1 可见性修饰符2.2 状态可变性2.3 错误处理2.4 事件与日志3. 高级特性3.1 继承与接口3.2 修饰器3.3 委托调用与代理合约4. 完整DeFi质押合约实现5. …

SmartDV推出先进的H.264和H.265视频编码器和解码器IP

向全球市场提供灵活、高度可配置、可定制的半导体设计知识产权&#xff08;IP&#xff09;和验证IP&#xff08;VIP&#xff09;的开发商SmartDV™ Technologies近日宣布&#xff1a;公司现已提供即刻可用的H.264和H.265视频编码器和解码器IP解决方案。针对每一种技术&#xff…

数据结构学习day8---strstr+symlink+remove+rename+link+truncate

一、strstr 1.头文件 #include <string.h> 2.函数原型 char *strstr(const char *haystack, const char *needle);3.功能 在一个字符串haystack中查找另一个字符串needle的第一次出现&#xff0c;并返回该位置的指针&#xff0c;如果找不到&#xff0c;则返回NULL。 …

智能设备远程管理:基于OpenAI风格API的自动化实践

在数字化转型的浪潮中&#xff0c;智能设备的远程管理功能变得越来越重要。通过API接口实现对智能设备的自动化操作&#xff0c;不仅可以提高工作效率&#xff0c;还可以增强系统的灵活性和可扩展性。本文将详细介绍如何利用Python和openai库&#xff0c;结合一个类似OpenAI风格…

数字电路工作原理

1、数字电路的分类 2、基本结构和特点 3、电路特性 4、电路互连 5、电路选型基本原则 1、数字电路的分类 GaAs 该电路类型 速度快,功耗大,原料剧毒,至今尚未被大量应用 硅 出现了单极型 PMOS NMOS CMOS 双极性 TTL STTL、LSTTL、ALSTTL、FTTL、LVTTL ECL MEC…

C# 进行音视频编解码开发

一、音视频编解码基础 1.1 基本概念 音视频编解码是数字媒体处理的核心技术,主要涉及将原始音视频数据进行压缩编码以便存储和传输,以及将压缩数据解码为可播放的原始格式。在 C# 环境下开发音视频编解码器,需要先了解几个关键概念: 编码 (Encoding):将原始音视频数据转…

YOLOv11深度解析:Ultralytics新一代目标检测王者的创新与实践(附网络结构图+训练/推理/导出全流程代码详解)

🔥 一、YOLOv11为何成为新标杆? 2024年底,Ultralytics正式推出YOLOv11,在COCO数据集上以更少参数量(减少22%) 实现了超越YOLOv8的精度,成为边缘设备与云端部署的新宠。其核心创新在于: 轻量化设计:深度可分离卷积(DWConv)大幅降低计算量注意力增强:C2PSA模块提升…

live server插件vscode的配置

安装完其实就可以直接使用了&#xff0c;一般来说不必手动配置&#xff0c;点击右下角的go live按钮就可以运行。默认端口是5500 好的&#xff0c;为你详细说明如何在 VS Code 中配置 Live Server 插件。这是一个非常有用的插件&#xff0c;我们不仅会讲如何安装和使用&#x…

基于MATLAB的风力发电机无人机巡检路径优化研究

基于MATLAB的风力发电机无人机巡检路径优化研究 摘要 本文针对风力发电机无人机巡检路径优化问题,提出了一种基于三维参数建模与智能优化算法的解决方案。通过建立风力发电机的三维几何模型,综合考虑无人机的飞行约束条件和巡检任务需求,设计了多目标优化函数,并采用改进…

经纬度哈希编码实现方式

背景&#xff1a;在大数据数仓建设的过程中&#xff0c;有时会遇到经纬度类型的数据信息&#xff0c;但在进行关联分析和数仓建设的时候用经纬度去关联&#xff0c;难免不够便捷&#xff0c;于是我们可以开发UDF使用地理经纬度信息哈希编码的方案进行开发&#xff0c;非常有效 …

支持向量机(SVM)深度解析:从数学根基到工程实践

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…

矩阵的范数和逆矩阵的范数的关系

文章目录 前提条件关键结论推导过程简述注意事项示例说明&#x1f4d8; 谱范数定义✅ 步骤一&#xff1a;计算 A T A A^T A ATA✅ 步骤二&#xff1a;求 A T A A^T A ATA 的特征值✅ 步骤三&#xff1a;取最大特征值的平方根✅ 对 A − 1 A^{-1} A−1 做同样的操作✅ 最终结…