動(dòng)機(jī)
目前,所有 Samza 作業(yè)都部署為單個(gè)單元/包,將所有 Samza 庫,用戶代碼和配置組合在一起。通常在大型組織中,管理 Samza 群集的團(tuán)隊(duì)與在 Samza 之上運(yùn)行應(yīng)用程序的團(tuán)隊(duì)不同。在這種情況下,目前的部署方式有兩個(gè)主要問題:
- Samza 軟件版本:每當(dāng) Samza 團(tuán)隊(duì)發(fā)布新版本(例如修復(fù)錯(cuò)誤)時(shí),部署它的唯一方法是重建所有用戶包并重新部署它們。如果團(tuán)隊(duì)可以按照自己的節(jié)奏單獨(dú)發(fā)布 Samza 框架,并且簡單的重新啟動(dòng)將會(huì)啟動(dòng)新版本,效率會(huì)更高。
- 軟件包不兼容:如果 Samza 和作業(yè)都依賴于相同的軟件,但是依賴于不同的(特別是向后不兼容的)版本,則不能一起發(fā)布,因?yàn)樗芸赡軙?huì)導(dǎo)致一些運(yùn)行時(shí)問題。理想情況下,它們中的每一個(gè)都將分別加載需要的包。 注意。這個(gè)問題在這里沒有解決。
為了解決第一個(gè)問題,我們通過定義兩個(gè)可部署單元來分離 Samza 框架與用戶作業(yè)的部署:
- Samza 框架 - 僅包含 Samza 庫,并單獨(dú)部署到集群中的所有計(jì)算機(jī)。
- 用戶工作 - 僅包含用戶代碼,并使用預(yù)部署的 Samza 框架運(yùn)行。
拆分部署允許升級 Samza 框架,而不強(qiáng)制開發(fā)人員顯式升級其正在運(yùn)行的應(yīng)用程序。它還允許不同版本的 Samza 框架與簡單的配置更改。這意味著我們可以支持運(yùn)行數(shù)十或數(shù)百個(gè)作業(yè)的組織通常需要的金絲雀,升級和回滾場景。
部署順序
拆分部署的先決條件
每個(gè)部署現(xiàn)在將由兩個(gè)獨(dú)立的軟件包組成:
- Samza 框架 - 包括所有 Samza 圖書館和腳本,如 samza-api,samza-core,samza-log4j,samza-kafka,samza-yarn,samza-kv,samza-kv-inmemory,samza-kv-rocksdb,samza -shell,samza-hdfs 及其所有依賴項(xiàng)。
- 用戶的工作 - 這包括作業(yè)包:StreamTask 實(shí)現(xiàn)的所有用戶代碼,配置和作業(yè)所需的其他庫。該工作的包應(yīng)該僅依賴于 samza-api 和沒有其他 Samza 庫。該包將無法自行啟動(dòng)。為了開始,它將需要使用 Samza 框架。
部署步驟
要以分拆部署模式運(yùn)行作業(yè):
- 部署框架:Samza 框架包應(yīng)該部署到集群的所有機(jī)器到預(yù)定義的固定位置。這可以通過僅復(fù)制 jar 來完成,或者創(chuàng)建將部署它們的元包。我們假設(shè) 'samza-framework' 包安裝到 '/.../samza-fwk/0.12.0' 目錄中。
- 創(chuàng)建符號(hào)鏈接:需要為穩(wěn)定版本的框架創(chuàng)建符號(hào)鏈接以指向框架位置,例如:ln -s /.../samza-fwk/0.12.0 /.../samza-fwk/STABLE'
- 部署用戶作業(yè):在作業(yè)的配置中,需要以下屬性才能啟用拆分部署,例如,在 '/ ... / samza-fwk' 中的 Samza 框架路徑:samza.fwk.path=/.../samza-fwk 。默認(rèn)情況下,Samza 將在文件夾內(nèi)查找穩(wěn)定鏈接以查找框架。您還可以通過配置覆蓋版本:samza.fwk.version=0.11.1。在這種情況下,Samza 將選擇 “/.../samza-fwk/0.11.1” 作為框架位置。這樣,用戶可以通過更改配置文件中的版本來輕松執(zhí)行金絲雀,升級和回滾作業(yè)。
更多建議: