Java 分佈式任務調度平臺:PowerJob 快速開始+配置詳解

本文適合有 Java 基礎知識的人羣前端

做者:HelloGitHub-Salieripython

引言

HelloGitHub 推出的《講解開源項目》系列。git

項目地址:github

https://github.com/KFCFans/PowerJobweb

PowerJob 的設計目標爲企業級的分佈式任務調度平臺,即成爲公司內部的調度中間件。整個公司統一部署調度中心 powerjob-server,旗下全部業務線應用只須要依賴 'powerjob-worker' 便可接入獲取任務調度與分佈式計算能力。spring

所以,PowerJob 由調度服務器(powerjob-server)和執行器(powerjob-worker)兩部分組成,powerjob-server 負責提供 Web 服務和完成任務的調度,powerjob-worker 則負責執行用戶所編寫的任務代碼,同時提供分佈式計算能力。mongodb

如下爲在本地開發環境快速搭建並試用 PowerJob 的教程。數據庫

1、STEP1: 初始化項目

  1. git clone https://github.com/KFCFans/PowerJob.git數組

  2. 導入 IDE,源碼結構以下,咱們須要啓動調度服務器(powerjob-server),同時在 samples 工程中編寫本身的處理器代碼服務器

2、STEP2: 啓動調度服務器

  1. 建立數據庫(不須要建表,只須要建立數據庫)powerjob-daily

  2. 修改配置文件,配置文件的說明官方文檔寫的很是詳細,此處再也不贅述。因爲是在本地 IDE 搭建測試環境,所以咱們選擇使用開發環境的配置文件 application-daily.properties 來修改並使用。須要修改的地方爲數據庫配置:

    • spring.datasource.core.jdbc-url
    • spring.datasource.core.username
    • spring.datasource.core.password
    • 固然,有 mongoDB 的同窗也能夠修改 spring.data.mongodb.uri 以獲取徹底版體驗。
  3. 完成配置文件的修改後,能夠直接經過啓動類 OhMyApplication 啓動調度服務器,觀察啓動日誌,查看是否啓動成功~啓動成功後,訪問 http://127.0.0.1:7700/ ,若是能順利出現 Web 界面,則說明調度服務器啓動成功!

  4. 註冊應用:點擊主頁應用註冊按鈕,填入 powerjob-agent-test 和控制檯密碼(用於進入控制檯),註冊示例應用(固然你也能夠註冊其餘的 appName,只是別忘記在示例程序中同步修改~)

3、STEP3: 編寫示例代碼

進入示例工程(powerjob-worker-samples),修改配置文件鏈接 powerjob-server 並編寫本身的處理器代碼。

  1. 修改 powerjob-worker-samples 的啓動配置類 OhMySchedulerConfigappName 修改成剛剛在控制檯註冊的名稱

  2. 編寫本身的處理器:在示例工程中新建一個類,繼承你想要使用的處理器(各個處理器的介紹可見官方文檔),這裏爲了簡單演示,選擇使用單機處理器 BasicProcessor ,如下代碼示例演示了在線日誌功能的使用。

    @Slf4j
    @Component public class StandaloneProcessorDemo implements BasicProcessor {   @Override  public ProcessResult process(TaskContext context) throws Exception {   OmsLogger omsLogger = context.getOmsLogger();  omsLogger.info("start process,context is {}.", context);  System.out.println("jobParams is " + context.getJobParams());   return new ProcessResult(true, "process successfully~");  } } 複製代碼
  3. 啓動示例程序,即直接運行主類 SampleApplication,觀察控制檯輸出信息,判斷是否啓動成功。

4、STEP4: 任務的配置與運行

調度服務器與示例工程都啓動完畢後,再次前往 Web 頁面( http://127.0.0.1:7700/ ),進行任務的配置與運行。

  1. 在首頁輸入框輸入配置的應用名稱,成功操做後會正式進入前端管理界面。
  1. 點擊任務管理 -> 新建任務(右上角),開始建立任務。
  1. 完成任務建立後,便可在控制檯看到剛纔建立的任務,若是以爲等待調度太過於漫長,能夠直接點擊運行按鈕,當即運行本任務。

  2. 前往任務示例邊欄,查看任務的運行狀態和在線日誌

4.1 基本配置

  • 任務名稱:名稱
  • 任務描述:描述
  • 任務參數:任務處理時可以獲取到的參數(即各個 Processor的process 方法入參 TaskContext 對象的 jobParams 屬性)(進行一次處理器開發就能理解了)
  • 定時信息:該任務的觸發方式,由下拉框和輸入框組成
  • API -> 不須要填寫任何參數,代表該任務由 OpenAPI 觸發
  • CRON -> 填寫 CRON 表達式( 在線生成網站
  • 固定頻率 -> 填寫整數,單位 毫秒
  • 固定延遲 -> 填寫整數,單位 毫秒
  • 工做流 -> 不須要填寫任何參數,代表該任務由工做流(workflow)觸發

4.2 執行配置

由執行類型(單機、廣播和 MapReduce)、處理器類型和處理器參數組成,後兩項相互關聯。

  • 內置 Java 處理器 -> 填寫該處理器的 全限定類名(eg, com.github.kfcfans.oms.processors.demo.MapReduceProcessorDemo
  • Java(容器) -> 填寫 容器ID#處理器全限定類名(eg, 18#com.github.kfcfans.oms.container.DemoProcessor
  • SHELL -> 填寫須要處理的腳本(直接複製文件內容)或腳本下載連接(http://xxx)
  • PYTHON -> 填寫完整的 python 腳本或下載連接(http://xxx)

4.3 運行配置

  • 最大實例數:該任務同時執行的數量
  • 單機線程併發數:該實例執行過程當中每一個 Worker 使用的線程數量(MapReduce 任務生效,其他不管填什麼,都只會使用必要的線程數...)
  • 運行時間限制:限定任務的最大運行時間,超時則視爲失敗,單位 毫秒,0 表明不限制超時時間( 不建議不限制超時時間)。

4.4 重試配置

  • Instance 重試次數:實例級別,失敗了整個任務實例重試,會更換 TaskTracker(本次任務實例的Master節點),代價較大,大型 Map/MapReduce 慎用。
  • Task重試次數:Task 級別,每一個子 Task 失敗後單獨重試,會更換 ProcessorTracker(本次任務實際執行的 Worker 節點),代價較小,推薦使用。
  • 注: 請注意同時配置任務重試次數和子任務重試次數以後的重試放大,好比對於單機任務來講,假如任務重試次數和子任務重試次數都配置了 1 且都執行失敗,實際執行次數會變成 4 次!推薦任務實例重試配置爲 0,子任務重試次數根據實際狀況配置。

4.5 機器配置

用來標明容許執行任務的機器狀態,避開那些風雨飄搖的機器,0 表明無任何限制。

  • 最低 CPU 核心數:填寫浮點數,CPU 可用核心數小於該值的 Worker 將不會執行該任務。
  • 最低內存(GB):填寫浮點數,可用內存小於該值的 Worker 將不會執行該任務。
  • 最低磁盤(GB):填寫浮點數,可用磁盤空間小於該值的 Worker 將不會執行該任務。

4.6 集羣配置

  • 執行機器地址:指定集羣中的某幾臺機器執行任務(debug 的好幫手),多值英文逗號分割,如 192.168.1.1:27777,192.168.1.2:27777
  • 最大執行機器數量:限定調動執行的機器數量

4.7 報警配置

選擇任務執行失敗後報警通知的對象,須要事先錄入。

基礎的教程到這裏也就結束了~更多功能示例可見官方文檔,工做流、MapReduce、容器等高級特性等你來探索!

5、總結與預告

本章詳細介紹了 PowerJob 的快速入門,根據本文可以快速搭建起本地開發/測試環境。下一章節,我將會對PowerJob 總體的架構作一個介紹,爲後面的技術剖析作準備。

那咱們下期再見嘍~

做者遊記

「常在河邊走,哪有不溼鞋」,然而,這句話在茶卡鹽湖卻屬於奢望。

稍有不慎,隱祕的鹽窟便對你敞開懷抱,瞬間將你吞噬~

鹽湖如此,人生亦是如此。

不免不幸時,也要對着美好的明天微笑~

關注公衆號加入交流羣(做者在 Java 羣)

相關文章
相關標籤/搜索