/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
PowerJob是新一代分布式任務調度與計算框架,支持CRON、API、固定頻率、固定延遲等調度策略,提供工作流來編排任務解決依賴關係,使用簡單,功能強大,文檔齊全。
PowerJob是一款任務調度框架設計源碼,可幫助變成人員快速設計出任務調度的框架,按照自己的設定自由更改後,就能完美開發出需要的任務調度軟件。對於變成人員來說使用起來非常簡單,直接上手就能用,而且定製完後任務調度功能,完全能夠滿足日常工作使用的需求。
有定時執行需求的業務場景:如每天淩晨全量同步數據、生成業務報表等。
有需要全部機器一同執行的業務場景:如使用廣播執行模式清理集群日誌。
有需要分布式處理的業務場景:比如需要更新一大批數據,單機執行耗時非常長,可以使用Map/MapReduce處理器完成任務的分發,調動整個集群加速計算。
有需要延遲執行某些任務的業務場景:比如訂單過期處理等。
使用簡單:提供前端Web界麵,允許開發者可視化地完成調度任務的管理(增、刪、改、查)、任務運行狀態監控和運行日誌查看等功能。
定時策略完善:支持CRON表達式、固定頻率、固定延遲和API四種定時調度策略。
執行模式豐富:支持單機、廣播、Map、MapReduce四種執行模式,其中Map/MapReduce處理器能使開發者寥寥數行代碼便獲得集群分布式計算的能力。
DAG工作流支持:支持在線配置任務依賴關係,可視化得對任務進行編排,同時還支持上下遊任務間的數據傳遞
執行器支持廣泛:支持Spring Bean、內置/外置Java類、Shell、Python等處理器,應用範圍廣。
運維便捷:支持在線日誌功能,執行器產生的日誌可以在前端控製台頁麵實時顯示,降低debug成本,極大地提高開發效率。
依賴精簡:最小僅依賴關係型數據庫(MySQL/Oracle/MS SQLServer...),擴展依賴為MongoDB(用於存儲龐大的在線日誌)。
高可用&高性能:調度服務器經過精心設計,一改其他調度框架基於數據庫鎖的策略,實現了無鎖化調度。部署多個調度服務器可以同時實現高可用和性能的提升(支持無限的水平擴展)。
故障轉移與恢複:任務執行失敗後,可根據配置的重試策略完成重試,隻要執行器集群有足夠的計算節點,任務就能順利完成。
STEP1: 初始化項目
導入 IDE,源碼結構如下,我們需要啟動調度服務器(powerjob-server),同時在samples工程中編寫自己的處理器代碼
STEP2: 啟動調度服務器
創建數據庫(僅需要創建數據庫):找到你的DB,運行SQLCREATE DATABASE IF NOT EXISTS `powerjob-daily` DEFAULT CHARSET utf8mb4,搞定~
修改配置文件,配置文件的說明官方文檔寫的非常詳細,此處不再贅述。需要修改的地方為數據庫配置spring.datasource.core.jdbc-url、spring.datasource.core.username和spring.datasource.core.password,當然,有mongoDB的同學也可以修改spring.data.mongodb.uri以獲取完全版體驗。
oms.env=DAILY
logging.config=classpath:logback-dev.xml
####### 外部數據庫配置(需要用戶更改為自己的數據庫配置) #######
spring.datasource.core.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.core.jdbc-url=jdbc:mysql://localhost:3306/powerjob-daily?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.core.username=root
spring.datasource.core.password=No1Bug2Please3!
spring.datasource.core.hikari.maximum-pool-size=20
spring.datasource.core.hikari.minimum-idle=5
####### mongoDB配置,非核心依賴,通過配置 oms.mongodb.enable=false 來關閉 #######
oms.mongodb.enable=true
spring.data.mongodb.uri=mongodb://localhost:27017/powerjob-daily
####### 郵件配置(不需要郵件報警可以刪除以下配置來避免報錯) #######
spring.mail.host=smtp.163.com
spring.mail.username=zqq@163.com
spring.mail.password=GOFZPNARMVKCGONV
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
####### 資源清理配置 #######
oms.instanceinfo.retention=1
oms.container.retention.local=1
oms.container.retention.remote=-1
####### 緩存配置 #######
oms.instance.metadata.cache.size=1024
完成配置文件的修改後,可以直接通過啟動類com.github.kfcfans.powerjob.server.OhMyApplication啟動調度服務器,觀察啟動日誌,查看是否啟動成功~啟動成功後,訪問 http://127.0.0.1:7700/ ,如果能順利出現Web界麵,則說明調度服務器啟動成功!
注冊應用:點擊主頁應用注冊按鈕,填入powerjob-agent-test和控製台密碼(用於進入控製台),注冊示例應用(當然你也可以注冊其他的appName,隻是別忘記在示例程序中同步修改~)
STEP3: 編寫示例代碼
進入示例工程(powerjob-worker-samples),修改配置文件連接powerjob-server並編寫自己的處理器代碼。
修改 powerjob-worker-samples 的 application.properties,將 powerjob.app-name 改為剛剛在控製台注冊的名稱。
server.port=8081
spring.jpa.open-in-view=false
########### powerjob-worker 配置 ###########
# akka 工作端口,可選,默認 27777
powerjob.worker.akka-port=27777
# 接入應用名稱,用於分組隔離,推薦填寫 本 Java 項目名稱
powerjob.worker.app-name=powerjob-agent-test
# 調度服務器地址,IP:Port 或 域名,多值逗號分隔
powerjob.worker.server-address=127.0.0.1:7700,127.0.0.1:7701
# 持久化方式,可選,默認 disk
powerjob.worker.store-strategy=disk
編寫自己的處理器:隨便找個地方新建類,繼承你想要使用的處理器(各個處理器的介紹可見官方文檔,文檔非常詳細),這裏為了簡單演示,選擇使用單機處理器BasicProcessor,以下是代碼示例。
@Slf4j
@Component
public class StandaloneProcessorDemo implements BasicProcessor {
@Override
public ProcessResult process(TaskContext context) throws Exception {
OmsLogger omsLogger = context.getOmsLogger();
omsLogger.info("StandaloneProcessorDemo start process,context is {}.", context);
System.out.println("jobParams is " + context.getJobParams());
return new ProcessResult(true, "process successfully~");
}
}
啟動示例程序,即直接運行主類com.github.kfcfans.powerjob.samples.SampleApplication,觀察控製台輸出信息,判斷是否啟動成功。
STEP4: 任務的配置與運行
調度服務器與示例工程都啟動完畢後,再次前往Web頁麵( http://127.0.0.1:7700/ ),進行任務的配置與運行。
在首頁輸入框輸入配置的應用名稱,成功操作後會正式進入前端管理界麵。
點擊任務管理 -> 新建任務(右上角),開始創建任務。
任務名稱:名稱
任務描述:描述
任務參數:任務處理時能夠獲取到的參數(即各個Processor的process方法入參TaskContext對象的jobParams屬性)(進行一次處理器開發就能理解了)
定時信息:該任務的觸發方式,由下拉框和輸入框組成
API -> 不需要填寫任何參數,表明該任務由OpenAPI觸發
CRON -> 填寫 CRON 表達式(在線生成網站)
固定頻率 -> 填寫整數,單位毫秒
固定延遲 -> 填寫整數,單位毫秒
工作流 -> 不需要填寫任何參數,表明該任務由工作流(workflow)觸發
執行配置:由執行類型(單機、廣播和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)
運行配置
最大實例數:該任務同時執行的數量
單機線程並發數:該實例執行過程中每個Worker使用的線程數量(MapReduce任務生效,其餘無論填什麼,都隻會使用必要的線程數...)
運行時間限製:限定任務的最大運行時間,超時則視為失敗,單位毫秒,0代表不限製超時時間(不建議不限製超時時間)。
重試配置:
Instance重試次數:實例級別,失敗了整個任務實例重試,會更換TaskTracker(本次任務實例的Master節點),代價較大,大型Map/MapReduce慎用。
Task重試次數:Task級別,每個子Task失敗後單獨重試,會更換ProcessorTracker(本次任務實際執行的Worker節點),代價較小,推薦使用。
注:請注意同時配置任務重試次數和子任務重試次數之後的重試放大,比如對於單機任務來說,假如任務重試次數和子任務重試次數都配置了1且都執行失敗,實際執行次數會變成4次!推薦任務實例重試配置為0,子任務重試次數根據實際情況配置。
機器配置:用來標明允許執行任務的機器狀態,避開那些搖搖欲墜的機器,0代表無任何限製。
最低CPU核心數:填寫浮點數,CPU可用核心數小於該值的Worker將不會執行該任務。
最低內存(GB):填寫浮點數,可用內存小於該值的Worker將不會執行該任務。
最低磁盤(GB):填寫浮點數,可用磁盤空間小於該值的Worker將不會執行該任務。
集群配置
執行機器地址:指定集群中的某幾台機器執行任務(debug的好幫手),多值英文逗號分割,如192.168.1.1:27777,192.168.1.2:27777
最大執行機器數量:限定調動執行的機器數量
報警配置:選擇任務執行失敗後報警通知的對象,需要事先錄入。
完成任務創建後,即可在控製台看到剛才創建的任務,如果覺得等待調度太過於漫長,可以直接點擊運行按鈕,立即運行本任務。
前往任務示例邊欄,查看任務的運行狀態和在線日誌