分布式定時任務: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
英文地址,請注明出處:http://en.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 做同樣的操作? 最終結…