時(shí)間:2024-02-08 11:17作者:下載吧人氣:33
好久沒(méi)更新Blog了,從CRUD Boy轉(zhuǎn)型大數(shù)據(jù)開(kāi)發(fā),拉寬了不少的知識(shí)面,從今年年初開(kāi)始籌備、組建、招兵買(mǎi)馬,到現(xiàn)在穩(wěn)定開(kāi)搞中,期間踏過(guò)無(wú)數(shù)的火坑,也許除了這篇還很寫(xiě)上三四篇。
進(jìn)入主題,通常企業(yè)為了實(shí)現(xiàn)數(shù)據(jù)統(tǒng)計(jì)、數(shù)據(jù)分析、數(shù)據(jù)挖掘、解決信息孤島等全局?jǐn)?shù)據(jù)的系統(tǒng)化運(yùn)作管理 ,為BI、經(jīng)營(yíng)分析、決策支持系統(tǒng)等深度開(kāi)發(fā)應(yīng)用奠定基礎(chǔ),挖掘數(shù)據(jù)價(jià)值 ,企業(yè)會(huì)開(kāi)始著手建立數(shù)據(jù)倉(cāng)庫(kù),數(shù)據(jù)中臺(tái)。而這些數(shù)據(jù)來(lái)源則來(lái)自于企業(yè)的各個(gè)業(yè)務(wù)系統(tǒng)的數(shù)據(jù)或爬取外部的數(shù)據(jù),從業(yè)務(wù)系統(tǒng)數(shù)據(jù)到數(shù)據(jù)倉(cāng)庫(kù)的過(guò)程就是一個(gè)ETL(Extract-Transform-Load)行為,包括了采集、清洗、數(shù)據(jù)轉(zhuǎn)換等主要過(guò)程,通常異構(gòu)數(shù)據(jù)抽取轉(zhuǎn)換使用Sqoop、DataX等,日志采集Flume、Logstash、Filebeat等。
數(shù)據(jù)抽取分為全量抽取和增量抽取,全量抽取類(lèi)似于數(shù)據(jù)遷移或數(shù)據(jù)復(fù)制,全量抽取很好理解;增量抽取在全量的基礎(chǔ)上做增量,只監(jiān)聽(tīng)、捕捉動(dòng)態(tài)變化的數(shù)據(jù)。如何捕捉數(shù)據(jù)的變化是增量抽取的關(guān)鍵,一是準(zhǔn)確性,必須保證準(zhǔn)確的捕捉到數(shù)據(jù)的動(dòng)態(tài)變化,二是性能,不能對(duì)業(yè)務(wù)系統(tǒng)造成太大的壓力。
通常增量抽取有幾種方式,各有優(yōu)缺點(diǎn)。
在源數(shù)據(jù)庫(kù)上的目標(biāo)表創(chuàng)建觸發(fā)器,監(jiān)聽(tīng)增、刪、改操作,捕捉到數(shù)據(jù)的變更寫(xiě)入臨時(shí)表。
優(yōu)點(diǎn):操作簡(jiǎn)單、規(guī)則清晰,對(duì)源表不影響;
缺點(diǎn):對(duì)源數(shù)據(jù)庫(kù)有侵入,對(duì)業(yè)務(wù)系統(tǒng)有一定的影響;
在ETL過(guò)程中,抽取方建立臨時(shí)表待全量抽取存儲(chǔ),然后在進(jìn)行比對(duì)數(shù)據(jù)。
優(yōu)點(diǎn):對(duì)源數(shù)據(jù)庫(kù)、源表都無(wú)需改動(dòng),完全交付ETL過(guò)程處理,統(tǒng)一管理;
缺點(diǎn):ETL效率低、設(shè)計(jì)復(fù)雜,數(shù)據(jù)量越大,速度越慢,時(shí)效性不確定;
在抽取數(shù)據(jù)之前,先將表中數(shù)據(jù)清空,然后全量抽取。
優(yōu)點(diǎn):ETL 操作簡(jiǎn)單,速度快。
缺點(diǎn):全量抽取一般采取T+1的形式,抽取數(shù)據(jù)量大的表容易對(duì)數(shù)據(jù)庫(kù)造成壓力;
時(shí)間戳的方式即在源表上增加時(shí)間戳列,對(duì)發(fā)生變更的表進(jìn)行更新,然后根據(jù)時(shí)間戳進(jìn)行提取。
優(yōu)點(diǎn):操作簡(jiǎn)單,ELT邏輯清晰,性能比較好;
缺點(diǎn):對(duì)業(yè)務(wù)系統(tǒng)有侵入,數(shù)據(jù)庫(kù)表也需要額外增加字段。對(duì)于老的業(yè)務(wù)系統(tǒng)可能不容易做變更。
變更數(shù)據(jù)捕獲Change Data Capture(簡(jiǎn)稱(chēng)CDC),SQLServer為實(shí)時(shí)更新數(shù)據(jù)同步提供了CDC機(jī)制,類(lèi)似于Mysql的binlog,將數(shù)據(jù)更新操作維護(hù)到一張CDC表中。開(kāi)啟CDC的源表在插入INSERT、更新UPDATE和刪除DELETE活動(dòng)時(shí)會(huì)插入數(shù)據(jù)到日志表中。cdc通過(guò)捕獲進(jìn)程將變更數(shù)據(jù)捕獲到變更表中,通過(guò)cdc提供的查詢函數(shù),可以捕獲這部分?jǐn)?shù)據(jù)。詳情可以查看官方介紹:關(guān)于變更數(shù)據(jù)捕獲 (SQL Server)
優(yōu)點(diǎn):提供易于使用的API 來(lái)設(shè)置CDC 環(huán)境,縮短ETL 的時(shí)間,無(wú)需修改業(yè)務(wù)系統(tǒng)表結(jié)構(gòu)。
缺點(diǎn):受數(shù)據(jù)庫(kù)版本的限制,實(shí)現(xiàn)過(guò)程相對(duì)復(fù)雜。
1. 已搭建好Kafka集群,Zookeeper集群;
2. 源數(shù)據(jù)庫(kù)支持CDC,版本采用開(kāi)發(fā)版或企業(yè)版。
案例環(huán)境:
Ubuntu 20.04
Kafka2.13-2.7.0
Zookeeper 3.6.2
SQL Server 2012
除了數(shù)據(jù)庫(kù)開(kāi)啟CDC支持以外,主要還是要將變更的數(shù)據(jù)通過(guò)Kafka Connect傳輸數(shù)據(jù),Debezium是目前官方推薦的連接器,它支持絕大多數(shù)主流數(shù)據(jù)庫(kù):MySQL、PostgreSQL、SQL Server、Oracle等等,詳情查看Connectors。
開(kāi)啟數(shù)據(jù)庫(kù)CDC支持
在源數(shù)據(jù)庫(kù)執(zhí)行以下命令:
EXEC sys.sp_cdc_enable_db GO
附上關(guān)閉語(yǔ)句:
exec sys.sp_cdc_disable_db
查詢是否啟用
select * from sys.databases where is_cdc_enabled = 1
網(wǎng)友評(píng)論