8 月 27 日,ChunJun 社群聯合 OceanBase 社群舉辦開源線下 Meetup,圍繞「構建新型的企業級數倉解決方案」主題,多位技術大牛和現場愛好者匯聚一堂,暢所欲言。
會上,袋鼠雲大資料引擎開發專家莫問精心準備了一場主題為「袋鼠雲開源框架基於數倉的一體化建設探索」的分享,透過 “如何圍繞數倉一體化建設進行探索”,“引進開源框架後如何解決建設難題”、“開源框架能夠帶來的收益” 三個開發者極其關心的問題,助力快速瞭解袋鼠雲開源框架在數倉一體化方面的能力。
秉持一直以來開源開放的初心,本文根據莫問演講全文整理而來,歡迎分享給更多的開發者和愛好者共同學習、探討。
開源框架誕生的背景
袋鼠雲開源框架源於公司一站式資料服務產品 - 數棧。本著 “取之開源,饋之開源” 的決心,我們從基礎設施、資料開發、任務運維三大方向分別開源了 Taier、ChunJun 以及 ChengYing 框架。
(開源框架事件時間線)
ChunJun—— 一種穩定、高效、易用的資料整合框架
・穩定:接受過在上百家企業的生產環境下的長期考驗
・高效:大幅度降低使用者的資料同步時常,使得每日 tb 級資料能夠在數小時內同步完成
・易用:開箱即用,無需額外的安裝步驟
(ChunJun 系統架構圖)
Taier—— 一種分散式視覺化的 DAG 任務排程框架
・穩定性:透過 HA + 過載處理,降低了單點故障的同時增強了框架的高負載處理能力
・易於擴充套件:從部署架構層面,可橫向擴充套件叢集增下框架排程能力;從引擎層面,支援自定義任務型別,滿足非原生任務排程
・介面視覺化:視覺化工作流配置以及任務監控管理
(Taier 系統架構圖)
ChengYing—— 一種全自動化的大資料運維工具
・快捷部署:支援服務的一鍵式部署,降低人工的重複操作以及失誤率
・統一資源管理:支援對叢集中所有產品包、主機以及叢集資源管理
・服務監控以及告警:支援各服務例項執行狀態、健康檢查、服務效能等指標檢測,並能夠將結果進行視覺化、告警通知等操作
(ChengYing 專案架構圖)
資料倉儲一體化探索之路
前期軟硬體準備階段
硬軟體準備階段是一個比較耗時的過程,而透過開源框架 ChengYing,我們可以新增對應的需要被 ChengYing 管控的主機以及將要安裝在這些主機上相關服務的產品包。
隨後透過 ChengYing 統一進行主機配置,並一鍵式快捷部署。當安裝好對應的服務之後,可透過 Prometheus 以及 Granfan 監控各個主機的 cpu、io、memory 指標以及告警。
除此之外,還能夠對所安裝的服務進行滾動重啟以及健康狀態監控,從新增機器到軟體安裝完畢,整個過程大大降低了人工的投入成本以及失誤操作。
建設階段 —— 實時
實時資料處理的需求在飛速增長,在各行各業均已得到證實。而我們同時也看到,各行業、企事業單位對於實時資料處理的需求,與其目前的專案開發方式和配套工具不適配的問題也在逐漸凸顯。
因此,我們引入實時數倉理念,透過 ChunJun 的實時採集、資料還原以及實時關聯計算功能對實時資料進行處理和分層計算來滿足日常的實時業務場景。
建設階段 —— 離線
實時計算是為了讓我們能夠做更快的決策,而離線計算是為了對資料進行分析,挖掘出潛在的價值。因此將資料從業務資料庫每日定時同步到 OLAP 數倉中進行清洗、轉換以及計算是對資料進行挖掘的基礎。
資料的按需同步以及容錯性是我們更為關心的一點。
實施執行階段
在資料倉儲實施執行階段,我們則選擇 Taier 來支援我們數倉任務的排程。它能為我們提供任務的批次管理的同時,讓我們對整個專案的任務執行情況瞭如指掌。對於失敗的任務,我們能夠按需配置任務的失敗重試策略,減少我們對任務上線後的運維成本。
另外,考慮多會有不同的角色在不同的叢集進行開發,我們正好可以利用 Taier 多租戶多叢集資源隔離的特性,來實現不同使用者在一套 Taier 叢集上分別執行不同的任務在各自 Hadoop 叢集上。
業務規模
經過上述對資料倉儲一體化的探索,目前的業務規模已經達到以下數字:
・數倉相關任務數量:2000 + 個
・單日任務最高例項數量:60000 + 個
・Tb 級資料同步:3 小時以內
・每日處理增量資料:20 億
・統一管控的機器規模數量:40 臺
開源框架在探索路上的演進過程
業務痛點
在資料倉儲一體化的這條探索之路上,結合具體業務,我們也遇到了一些痛點亟待解決:
● Kerberos 認證
Kerberos 是 hadoop 安全的解決方案,越來越多的客戶在 hadoop 叢集中選擇開啟 kerberos。而 Kerberos 部署、配置過程的複雜性、client 的認證如何續期以及多 kdc 場景下是對接 hadoop 的第一道屏障。
● 資料讀寫效能
金融行業的歷史行為資料通常是 tb 甚至 pb 級別的,即使每日的增量資料也有 10 億行 +。當透過 Chunjun 對資料進行全量 / 增量同步時,反饋執行時常達不到預期,以致影響對業務的決策時間。
● 批流一體
不論是基於 lambda 架構的流批獨立還是基於 kappa 的純實時架構在執行久了之後缺點也會逐漸暴露出來;比如 lambda 架構的開發維護成本日益增高以及 kappa 架構的實時計算任務因極端資料亂序導致計算資料不準確從而面臨資料質量上的問題。
Kerberos 認證支援
透過 ChengYing 部署 Hadoop 服務以及 KDC 服務並配置好相關許可權生成 Keytab 檔案以及 Krb5 檔案。使用者只需要關心是否從以配置好 kerberos 的 hadoop 叢集將使用者對應許可權的 keytab、krb5 檔案一鍵上傳到 Taier 叢集中。
後面經過 Taier 排程的 ChunJun 任務都會從叢集中下載上傳的 kerberos 認證相關資訊,隨後進行 kerberos 認證以及自動續期。使得使用者不用在寫大量 kerberos 認證程式碼以及浪費更多的時間在 kerberos 上,既保證了資料的安全也保證了開發效率。
資料讀寫效能 - 自定義序列化格式
在經過我們多次對 ChunJun 效能的測試以及火焰圖的分析之後,我們發現資料的序列化 / 以及反序列化是對讀寫效能損耗最大的一塊,透過對 Kryo 序列化的研究,我們實現了自己的序列化格式:ColumnRowData。
相較於 kryo 序列化,ColumnRowData 具有更為密集的儲存,相容 null 值以及減少不必要的資料傳輸等優勢。
批流一體支援
當資料被採集到指定的儲存層後,會結合儲存型別以及業務時效性對資料進行常規的業務計算。ChunJun Sql 能支援流批計算的能力來源於對後設資料的統一管理以及在 DataStream API 上支援批執行模式。這樣增強了作業的可複用性和可維護性,使得 ChunJun 作業可以在流和批兩種執行模式之間自由進行切換並只需要維護一套程式碼,無需重新寫任何程式碼。
除此之外,任務批流模式之間的切換計算也大幅度提升了資料最終的質量度以及準確性。
總結展望
引入開源框架後的收益
・引入 ChunJun 後業務開發週期縮短,開發人員只需專注於業務開發,無需關注底層的技術實現。大幅度降低了業務開發的整個生命週期
・引入 Taier 後,技術同學專注業務開發,任務開發完畢後,不用關心任務錯綜複雜的依賴關係與底層的大資料平臺的架構實現,將工作的重心更多地聚焦在業務之中
・引入 ChengYing 後,運維部署成本降低,透過 ChengYing,我們能夠將原來手動部署 Hadoop 的時間從數小時縮短至 6 分鐘;並能夠對各個服務進行介面化監控以及管理,降低運維部署成本。
開源框架未來的規劃
ChunJun:領先、穩定、高效
・多版本資料來源共存
・型別轉換統一規範化
・資料還原功能更加完善
・E2E 單測體系建立
・全量 & 增量實時採集
・資料湖生態完善
・儲存層批流統一
Taier:部署多樣化、功能完善、多系統對接
・新增其他任務型別支援
・同時支援 yarn/k8s
・支援 Schedule/Worker 整合與分離部署
・支援交易日曆、事件驅動
・外部系統對接(Azkban、Control-M、DS)等
ChengYing:自動化、簡便易用、告警型別豐富
・支援基於主機角色與服務型別自動編排
・支援透過叢集開啟 Kerberos 認證以及票/據的生成與下載
・自定義部署產品包流水線順序
・支援基於 PromQL 的自定義告警設定,豐富告警型別