編輯導語:數據集成産品是數據中台建設的第一環節,在構建數據中台或大數據系統時,首先要将企業内部各個業務系統的數據實現互聯互通,從物理上打破數據孤島。本文作者對數據集成産品進行了分析,一起來看一下吧。
數據集成産品緻力于異構數據源之間的數據交換與彙聚,該類産品是數據中台建設的第一環節,筆者将通過兩篇文章對數據集成産品進行分析。
數據同步,又稱為數據集成、數據遷移,主要用于實現不同系統間的數據流轉。
為什麼會有數據同步這類産品?
在企業中,業務的快速發展産生了大量數據,也催生出多種應用系統,各系統承載不同類型的數據,對應着不同的數據存儲方式。
而對于構建數據中台或大數據系統,首先需要将企業内部各個業務系統的數據實現互聯互通,從物理上打破數據孤島,而這主要通過數據彙聚和同步的能力來實現。
數據同步方式有多種:API接口同步、數據文件同步和數據庫日志解析同步,适用于不同的業務場景。
本次分享的數據同步是基于數據庫日志解析的方式實現,其主要應用場景是:數據從業務系統同步到數倉,和數據從數倉同步到數據應用兩個方面。
一、數據集成産品簡介1. 産品介紹
數據同步緻力于保證數據在不同數據源之間被高效準确地遷移。根據數據時效性要求和應用場景,數據同步可分為離線同步和實時同步:
1)離線同步
主要用于大批量數據的周期性遷移,對時效性要求不高,一般采用分布式批量數據同步方式,通過連接讀取數據,讀取數據過程中可以有全量、增量方式,經過統一處理後寫入目标存儲。
成熟的産品有:Sqoop、DataX、kettle等。
2)實時同步
針對數據時效性要求高的場景,其将源端數據的變化實時同步到目标端數據源中,保證源端數據與目标端數據實時保持一緻,就可滿足業務實時查詢分析使用數據或實時計算等需求。
成熟的産品有:Canal、otter等。
在實際業務場景中,離線同步和實時同步搭配使用,為保證已有的數據表在目标端數據源中可用,會使用離線同步将該表的曆史數據全量遷移到目标端數據源中,對于增量數據則通過實時集成來增量遷移。
2. 核心流程
數據集成的實現有三個關鍵步驟:數據讀取、數據轉換(映射)、數據寫入,核心流程如下圖所示:
具體流程為:數據集成從源端數據源中讀取數據,按照建好的映射關系及轉換規則,将數據寫入到目标數據源中。其中:
- 配置源端數據源和目标端數據源,用于連接數據源,獲取數據源的讀、寫權限等
- 建立映射關系:源端數據源中數據表及字段對應到目标端數據源中的哪張表和字段。建立映射關系後,數據集成根據映射關系,将源端數據寫入到對應的目标端數據
- 數據轉換規則:數據寫入時,可能有不同數據格式轉換,敏感數據脫敏展示、無用字段過濾、null值處理等需求,可以制定相應的數據轉換規則來實現
- 數據傳輸通道:可配置任務并發數、數據連接數等任務參數,達到數據集成的任務被高效穩定執行等目的
基于上述流程,數據集成産品的核心功能一般會包含以下4個:
數據集成平台在進行異構數據源之間的數據遷移時,需要保證遷移任務被高效完成,被遷入目标端數據源的數據是準确可靠的、實時的,數據傳輸過程是安全的等,這是用戶核心關注點,也是期望平台達到的目标。
3. 其他大數據産品的聯系和區别
在構建數據倉庫的場景中,數據加載到數倉後,随後進行數據加工和數據應用,其中涉及的3類大數據産品如下:
1)數據集成:面向數據彙聚與交換
産品流程:配置數據源—創建同步任務—配置調度任務。
核心任務:ETL、校驗、補數、合并。
2)數據加工:面向數據分析
産品流程:創建表—編寫加工邏輯(insert)—配置調度任務。
數據加工方式:離線計算、實時計算、機器學習等。
3)任務調度:工作流編排
産品流程:創建任務節點—配置節點依賴關系—提交并執行。
任務調度:任務執行、任務調度與運維。
- 數據集成和數據加工都是數據生命周期中的一環
- 數據集成任務和數據加工任務其實就是任務調度中的任務節點job,任務調度保證數據被順序采集和加工出來
以用戶畫像分析為例,oss_數據同步和rds_數據同步兩個節點是數據集成任務節點,ods_log_info_d、dws_user_info_all_d、rpy_user_info_d三個節點是數據加工任務節點,繪制各節點間的連線即工作流編排。
提交并執行畫布中的流程節點,數據就會按照箭頭方向執行各節點,産出最終結果。
區别:數據集成和數據加工都基于任務執行和調度實現,兩者雖然都是ETL,但是各自關注的重點并不相同。
①核心動作
數據集成核心動作是抽數(讀、寫、轉換),也就是數據交換,轉換動作也隻是簡單的數據清洗。
數據加工的核心動作是計算邏輯/清洗等加工規則的編寫,加工規則複雜。
②核心目标
數據集成的核心目标,是保證數據被高效準确地遷移到目标端數據源。
數據加工的核心目标,是加工規則編寫準确“翻譯”業務需求。
二、數據集成産品流程離線集成與實時集成在實際運行中,關注的側重點是不同的,對于離線集成,面對的是批數據,更多考慮大規模數據量的遷移效率問題;對于實時集成,面對的是流數據,更多考慮數據準确性問題。
數據同步中一般采用先全量在增量的方式來進行數據的遷移,即先将曆史數據全量遷移到目标數據源,完成初始化動作,在進行增量數據的實時同步,這樣保證目标端數據的可用性。當然也有不care曆史數據的場景,此時就無需進行全量遷移的動作。
1. 實時集成
我們主要采用基于日志的CDC方式來實現增量數據的實時同步,CDC即change data capture,捕獲數據的變化。
實時集成通過讀取源端數據庫日志bin_log來捕獲數據的變化情況(insert、update、delete),将其傳輸到kafka topic中,然後通過spark streaming對數據進行轉換/清洗,寫入到stg增量表中,最後将增量數據與全量數據合并到數倉ods表中。
由于數據庫日志抽取一般是獲取所有的數據記錄的變更(增、删、改),落到目标表時,需要根據主鍵去重,并按照日志時間倒序排列獲取最後狀态的變化情況。
具體的實時集成任務執行邏輯及流程如下所示:
實時集成有以下特點:
- 源端數據庫産生一條記錄,數據集成實時同步一條記錄
- 流數據在數據傳輸過程中可能會被丢失或延遲
故相較于離線集成,在數據同步鍊路上,實時集成會增加數據校驗和數據合并兩個動作。
- 數據校驗主要校驗源端和目标端的數據量,保證數據沒有被丢失
- 數據合并則是由ods庫base表和cdc目标庫increment表組成,具體邏輯為:将stg數據按主鍵去重,取最新一條,根據主鍵與ods數據表中的T 1數據合并
2. 離線集成
離線集成分為全量和增量兩種方式對大規模數據進行批量遷移。
- 全量遷移是将某些表的全部曆史數據同步到目标數據源中
- 增量遷移,通常需要使用where子句(RDB)或者query子句(MongoDB)等增量配置參數,同時在結合調度參數(定時任務的重複周期:分鐘、小時、天、周、月等)可實現增量遷移任意指定日期内的數據。
比如,想要實現每日數據的增量同步,各參數可配置為:
- Where子句:配置為DS=’${dateformat(yyyy-MM-dd,-1,DAY)}’,
- 配置定時任務:重複周期為1天,每天的淩晨0點自動執行作業
增量遷移的數據可以對目标端數據源表中數據進行追加、覆蓋和更新操作。
作者:細嗅薔薇,零号産品er
本文由 @細嗅薔薇 原創發布于人人都是産品經理,未經許可,禁止轉載
題圖來自 Unsplash,基于 CC0 協議
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!