繼上期數據中台技術匯欄目發布DataSimba——企業級一站式大數據智能服務平台,本期介紹DataSimba的數據采集平台。
DataSimba采集平台屬於DataSimba的數據計算及服務平台的一部分, 負責數據的導入, 從而支持上層的數據處理。 DataSimba的定位是面向企業私有化部署,決定了采集平台面臨要解決的問題和傳統的互聯網公司不太一樣:
1、企業使用的數據庫類型多且雜, 包括很多非主流的數據庫;
2、企業的數據管理水平參差不齊, 依賴數據規范(如:維護列modify_time判斷記錄是否修改)的導入方式推行困難;
3、需要支持的場景比較復雜, 包括:流處理、增量處理、批處理;
4、企業的數據平台規模一般較小,資源有限, 需要更好的平衡計算成本與效率。
采集平台總體架構

整個采集平台核心為DataX與DataS兩個采集組件:
DataX:
·阿里開源的數據集成組件,通過jdbc,以查詢的方式支持通用的關系行數據庫導入;
·DataSimba 同時支持向導模式和腳本模式。
·可擴展支持NoSQL、FTP等。
DataS:
奇點雲針對復雜的企業數據環境開發的, 基於數據庫日志(類似binlog)同步數據的工具, 主要特征如下:
·配置簡單: 整庫導入配置只需要一分鍾, 支持實時抽取、增量落盤、全量合並;
·基於數據庫Log采集, 以減少對企業現有系統的侵入。 目前支持Mysql, Sqlserver, Oracle, Postgres, MongoDB;
·支持多種業務場景, 包括:實時計算, 增量計算(10m~1h), 全量批處理(>1h);
·高效的數據合並性能, 節省計算資源;
·schema自動同步;
DataX vs DataS:
·DataX通過查詢(即Select)方式, 而DataS通過解析數據庫日志;
·DataX 支持數據源更廣, DataS支持數據源較少(見下表);
·DataX 對數據源壓力較大, 而DataS對數據源壓力較小;
·DataX 需要數據源有較大的空閑時間窗口, 用於抽取數據。 而DataS不需要;
·DataX 需要維護類似modify_time字段做增量抽取, 而DataS不需要;
·DataX 無法跟蹤記錄變更過程, DataS可以跟蹤;
·DataX 不支持實時數據采集, DataS支持秒級的數據采集;
DataSimba在采集數據時優先使用DataS的方式。
為什么要做DataS
早期的Simba使用DataX導入數據, 在企業部署過程中遇到很多問題, 如:
·某快消企業, 數據庫本身的壓力就比較大, 且沒有大段的空閑窗口用於數據采集, 采用DataX抽取難度較大。
·某企業, 數據庫每日增量較少(~10GB), 但全量數據較大(>20T), 導致增量與全量合並的效率較低, 消耗資源比較多。
·某金融企業, 需要在數倉中跟蹤賬戶余額的每一次變動, 又要不侵入現有的業務, 采用DataX的方式無法做到。
·某企業大屏, 需按小時刷新, 統計數據量較大, 采用流式計算成本較高, 實現比較復雜。 采用DataX又無法做到小時以內的采集頻率。
以上只是在simba部署過程中碰到的一部分內容。 為了解決碰到的種種問題, 我們最終決定開發一套新的采集工具: DataS。
DataS 技術方案
DataS 的目標是: 配置維護簡單, 支持多種數據源, 支持多種應用場景, 盡可能高效。
與cannal/maxwell等binlog采集工具相比, DataS支持更多的數據庫類型:

實時采集數據流程
實時采集的主要流程如下:
1、 數據源端創建訪問賬號, 設置權限和日志配置項
2、 simba平台上配置數據源
3、 simba平台上創建導入任務, 選擇導入的庫和表, 確定是否合並
4、 發布導入任務
5、 DSExtracter從數據庫源拉取全量快照, 作為初始化導入數據
6、 DSExtracter實時解析數據庫日志, 以增量的方式解析新增數據到kafka
7、 DSLoader 按照設定的周期(通常是10分鍾)將新增數據落盤到增量數據層(INC)
8、 DSMerger 定期(通常是30分鍾)將新增數據與全量數據合並到ODS
9、 后續的計算以增量或者全量的方式從ODS層消費數據
技術亮點
一、高效的合並方案
DataS同時保留了增量的日志數據和全量的快照數據, 以支持復雜的企業業務場景。 同時DataS提供了高效的快照合並方案。 以下是DataS合並與基於HBase方案合並的性能比較測試。對於1T以上的數據表增量和全量merge時, DataS有12 ~24 倍的性能提升。

與傳統的利用HiveSQL 或者HBase 做merge的方式不同, DataS采用了二級映射的方式, 使最終的合並轉化為一個RDD或者一個Map中就可完成的小文件合並, 並避免了不需要合並的文件讀取, 如圖所示:

DataS合並邏輯如下:
1、 DataS會將新增數據划分到不同的hive分區中, 分區可以根據業務自定義;
2、 在一個分區內, DataS利用布隆過濾(Bloom Filter)將數據映射到不同的文件;
3、 新增數據和單一存儲文件做局部合並;
將整個合並最終划分為小文件的合並, 從而大幅提高了合並的效率。
二. 近實時的數據時延
DataS提供兩種合並方式: 寫時拷貝(CopyOnWrite)和 讀時合並(MergeOnRead)
寫時拷貝是指每次增量數據與文件合並時, 都是拷貝兩邊的數據生成新的全量數據文件。 此種方式合並時性能稍差, 但讀數據(統計查詢)時性能好一些, 過程如下:

讀時合並是指合並時只將增量數據寫入日志文件, 讀時(查詢統計)再合並重復數據。 同時會定期全量合並。 此種方式的合並效率很高, 數據時延可以達到秒級~分鍾級, 但查詢時性能稍差, 如圖所示:

兩種方式使用與不同的業務場景: 注重讀性能或者注重合並性能。
Datas支持豐富的場景應用
按照數據要求的時延和數據要求的完整性, 計算場景大致可分為三類:

其中:
·實時計算: 很多數據時延要求在 毫秒級 ~ 10分鍾的場景, 通常采用flink或者spark等計算引擎。 如:監控告警、實時特征等等。
·增量計算:時延要求在10分鍾~小時級別, 數據要求增量處理的場景。 如企業大屏、活動效果分析、當日uv等統計數據展示。
·全量批處理: 主要針對各種T+1的報表統計, Simba目前采用Hive引擎。
目前市場上對於實時計算和全量批處理都有成熟的方案, 但對於夾縫中的增量計算支持的都不太好。增量計算無論是采用流式實時處理, 還是采用全量批處理, 都比較浪費資源, 且效果不理想。 DataS可以支持增量的采集、合並、計算, 以較低的計算成本支持了此類場景。 此外, DataS能很好的支持秒級以上的實時計算和批處理任務。
附-DataSimba數據采集支持的多種數據源
DataSimba的采集平台支持豐富的數據源, 包括:
