- 數(shù)據(jù)自助服務(wù)實(shí)踐指南:數(shù)據(jù)開放與洞察提效
- (美)桑迪普·烏坦坎達(dá)尼
- 3178字
- 2022-05-20 19:18:52
5.4 實(shí)現(xiàn)模式
數(shù)據(jù)遷移服務(wù)包含4個(gè)關(guān)鍵模塊:接入模塊、轉(zhuǎn)換模塊、合規(guī)模塊和驗(yàn)證模塊。本章重點(diǎn)介紹實(shí)現(xiàn)接入模塊和轉(zhuǎn)換模塊的模式。合規(guī)模塊和驗(yàn)證模塊的模式是通用構(gòu)件,分別在第9章和第18章中介紹。對(duì)應(yīng)于現(xiàn)有的接入和轉(zhuǎn)換的任務(wù)圖,數(shù)據(jù)遷移服務(wù)的自動(dòng)化程度有三個(gè)級(jí)別(如圖5-3所示)。

圖5-3:數(shù)據(jù)遷移服務(wù)的不同自動(dòng)化級(jí)別
5.4.1 批處理接入模式
批處理接入是大數(shù)據(jù)發(fā)展早期流行的一種傳統(tǒng)模式,它既適用于一次性數(shù)據(jù)遷移,也適用于計(jì)劃性數(shù)據(jù)遷移。批處理指的是將源數(shù)據(jù)上的更新打包在一起,然后定期遷移到目標(biāo)數(shù)據(jù)中。批處理通常用于大型數(shù)據(jù)源的數(shù)據(jù)遷移,而不需要實(shí)時(shí)更新。批處理過程通常每6~24小時(shí)調(diào)度一次。
批處理接入模式分為三個(gè)階段(如圖5-4所示)。

圖5-4:批處理接入模式包括使用map階段(MapReduce)對(duì)源數(shù)據(jù)對(duì)象進(jìn)行分區(qū),并將其并行復(fù)制到目標(biāo)數(shù)據(jù)對(duì)象中
1. 分區(qū)階段
要拷貝的源表在邏輯上被分割成更小的塊,以并行化數(shù)據(jù)遷移。
2. map階段
每個(gè)塊被分配給一個(gè)mapper(MapReduce中的術(shù)語)。mapper觸發(fā)查詢,從源表讀取數(shù)據(jù)并復(fù)制到目標(biāo)表。使用更多mapper將產(chǎn)生更多的并發(fā)數(shù)據(jù)傳輸任務(wù),從而可以更快地完成作業(yè)。但是,這會(huì)增加數(shù)據(jù)庫上的負(fù)載,可能會(huì)影響源數(shù)據(jù)的性能。對(duì)于增量表拷貝,mapper會(huì)處理自上次更新以來對(duì)源表的插入、更新和刪除。
3. reduce階段
mapper的輸出被存儲(chǔ)為staging文件,并由reducer合并為目標(biāo)數(shù)據(jù)存儲(chǔ)上的單個(gè)具體化視圖。reducer還可以實(shí)現(xiàn)轉(zhuǎn)換功能。
批處理接入模式的一個(gè)流行示例是Apache Sqoop(https://oreil.ly/iqArX),Sqoop用于批量數(shù)據(jù)遷移,通常在關(guān)系型數(shù)據(jù)庫和文件系統(tǒng)到HDFS和Apache Hive之間遷移數(shù)據(jù)。它是以客戶端-服務(wù)器模型實(shí)現(xiàn)的:客戶端安裝在源數(shù)據(jù)和目標(biāo)數(shù)據(jù)存儲(chǔ)中,數(shù)據(jù)遷移任務(wù)由客戶端的Sqoop服務(wù)器以MapReduce作業(yè)的形式調(diào)度。用于連接數(shù)據(jù)存儲(chǔ)的特定技術(shù)適配器安裝在客戶端上(在較新的Sqoop 2版本中,驅(qū)動(dòng)程序安裝在服務(wù)器上)。數(shù)據(jù)遷移是一個(gè)MapReduce作業(yè),其中源客戶端上的mapper將從源數(shù)據(jù)存儲(chǔ)傳輸數(shù)據(jù),而目標(biāo)客戶端上的reducer將復(fù)制和轉(zhuǎn)換數(shù)據(jù)。Sqoop支持全表刷新和基于高水印的增量表復(fù)制。
批處理接入模式的優(yōu)點(diǎn):
- 它是一種傳統(tǒng)的數(shù)據(jù)遷移模式,適用于各種源數(shù)據(jù)和目標(biāo)數(shù)據(jù)存儲(chǔ)。數(shù)據(jù)源所有者在使用、管理和維護(hù)其源數(shù)據(jù)存儲(chǔ)時(shí)只需付出極小的成本。
- 它支持?jǐn)U展到每天數(shù)以千計(jì)的計(jì)劃性數(shù)據(jù)遷移,還利用MapReduce實(shí)現(xiàn)故障恢復(fù)。
- 它內(nèi)置了對(duì)復(fù)制后數(shù)據(jù)驗(yàn)證的特性。
批處理接入模式的缺點(diǎn):
- 它不支持近實(shí)時(shí)的數(shù)據(jù)刷新。
- 它可能會(huì)潛在地影響源數(shù)據(jù)存儲(chǔ)的性能。此外,用于連接源數(shù)據(jù)存儲(chǔ)的JDBC連接存在潛在的合規(guī)問題,而這些數(shù)據(jù)存儲(chǔ)是符合監(jiān)管規(guī)定的。
- 它對(duì)使用硬刪除的增量表刷新和數(shù)據(jù)轉(zhuǎn)換功能的支持有限。
批處理是團(tuán)隊(duì)在大數(shù)據(jù)旅程早期的一個(gè)良好起點(diǎn)。根據(jù)分析團(tuán)隊(duì)的成熟度,面向批處理可能就足夠用了。數(shù)據(jù)工程團(tuán)隊(duì)通常使用這種模式來快速覆蓋可用的數(shù)據(jù)源。
5.4.2 變更數(shù)據(jù)捕獲接入模式
隨著團(tuán)隊(duì)逐漸成熟,團(tuán)隊(duì)不再采用批處理方式,開始轉(zhuǎn)向變更數(shù)據(jù)捕獲(Change Data Capture,CDC)模式。它適用于正在進(jìn)行的數(shù)據(jù)遷移,在這種情況下,源數(shù)據(jù)更新需要以低延遲(以秒或分鐘為單位)在目標(biāo)數(shù)據(jù)上可用。CDC意味著捕獲源數(shù)據(jù)上的每個(gè)變更事件(更新、刪除、插入),并將更新應(yīng)用到目標(biāo)數(shù)據(jù)上。這種模式通常與批處理接入結(jié)合使用,批處理用于源表的完整副本初始化,而連續(xù)更新則使用CDC模式完成。
CDC接入模式分為三個(gè)階段(如圖5-5所示)。

圖5-5:CDC接入模式的各個(gè)階段
1. 產(chǎn)生CDC事件
在源數(shù)據(jù)庫上安裝和配置CDC適配器,該適配器是一種特定于源數(shù)據(jù)存儲(chǔ)的軟件,用于跟蹤對(duì)用戶指定表的插入、更新和刪除操作。
2. 發(fā)布CDC到事件總線
CDC發(fā)布在事件總線上,可以被一個(gè)或多個(gè)分析用例使用。總線上的事件是持久化的,在出現(xiàn)故障時(shí)可以重新回放。
3. 事件合并
每個(gè)事件(插入、刪除、更新)都應(yīng)用于目標(biāo)數(shù)據(jù)上的表。最終的結(jié)果是一個(gè)具體化的表視圖,這個(gè)表視圖相對(duì)于源表延遲較小。在數(shù)據(jù)目錄中更新與目標(biāo)表對(duì)應(yīng)的元數(shù)據(jù),以反映刷新時(shí)間戳和其他屬性。
CDC接入模式有一種變體,可以直接使用事件,而不是通過合并步驟(即去掉圖5-5中的步驟3)。這通常適用于將原始CDC事件轉(zhuǎn)換為特定業(yè)務(wù)事件的場(chǎng)景。另一種變體是將CDC事件存儲(chǔ)為基于時(shí)間的日志,這通常適用于風(fēng)險(xiǎn)和欺詐檢測(cè)分析。
CDC接入模式的一個(gè)流行的開源實(shí)現(xiàn)是Debezium(https://debezium.io)與Apache Kafka(https://oreil.ly/mH9yU)相結(jié)合。Debezium是一個(gè)低延遲的CDC適配器,在標(biāo)準(zhǔn)化事件模型中捕獲提交到數(shù)據(jù)庫的變更,并且與數(shù)據(jù)庫技術(shù)無關(guān)。事件描述了在何時(shí)何地發(fā)生了什么變更。事件以一個(gè)或多個(gè)Kafka主題(通常每個(gè)數(shù)據(jù)庫表有一個(gè)主題)的形式在Apache Kafka上發(fā)布。Kafka確保所有的事件都有副本且完全有序,并且允許許多用戶獨(dú)立地使用這些相同的數(shù)據(jù)變更事件,而幾乎不影響上游系統(tǒng)。如果在合并過程中出現(xiàn)故障,可以完全從原地恢復(fù)。這些事件可以只傳遞一次或者至少傳遞一次——每個(gè)數(shù)據(jù)庫/表的所有數(shù)據(jù)實(shí)現(xiàn)模式變更事件都按照它們?cè)谏嫌螖?shù)據(jù)庫中發(fā)生的相同順序傳遞。
為了將CDC記錄合并到一個(gè)具體化的目標(biāo)表中,一般使用MapReduce面向批處理,或者使用Spark等技術(shù)面向流處理。兩個(gè)流行的開源解決方案是Apache Gobblin(https://oreil.ly/8rvyX),它使用MapReduce(如圖5-6所示),以及Uber的Marmaray(https://oreil.ly/Va_Vc),它使用Spark。Gobblin中的合并實(shí)現(xiàn)包括反序列化/提取、格式轉(zhuǎn)換、質(zhì)量驗(yàn)證和向目標(biāo)寫入。Gobblin和Marmaray都是為從任何源數(shù)據(jù)到任何目標(biāo)數(shù)據(jù)的數(shù)據(jù)遷移而設(shè)計(jì)的。

圖5-6:在數(shù)據(jù)從源數(shù)據(jù)遷移到目標(biāo)數(shù)據(jù)的過程中,Apache Gobblin(摘自SlideShare(https://oreil.ly/yDSUB))實(shí)現(xiàn)的內(nèi)部處理步驟
CDC接入模式的優(yōu)點(diǎn):
- CDC模式是一種低延遲的解決方案,用于更新目標(biāo),且對(duì)源數(shù)據(jù)存儲(chǔ)的性能影響最小。
- CDC適配器可用于主流的數(shù)據(jù)存儲(chǔ)。
- 它支持在數(shù)據(jù)遷移過程中進(jìn)行過濾和數(shù)據(jù)轉(zhuǎn)換。
- 它支持使用增量方式接入大型表。
CDC接入模式的缺點(diǎn):
- 考慮到選擇CDC適配器的最佳配置選項(xiàng)需要較專業(yè)的經(jīng)驗(yàn),提高了使用的入門門檻。
- 使用Spark(而不是Hadoop MapReduce)的合并實(shí)現(xiàn),在處理超大表(大約10億行)時(shí)可能會(huì)有一些困難。
- 它需要一個(gè)帶有CDC列的表來跟蹤增量變更。
- 它僅能支持有限數(shù)據(jù)量的數(shù)據(jù)過濾或數(shù)據(jù)轉(zhuǎn)換。
這種方法非常適合快速遷移大批量數(shù)據(jù),是最受歡迎的方法之一。它要求源數(shù)據(jù)團(tuán)隊(duì)和數(shù)據(jù)工程團(tuán)隊(duì)之間配合順暢,以確保準(zhǔn)確無誤地跟蹤變更和大規(guī)模合并更新。
5.4.3 事件聚合模式
事件聚合模式是一種常見的聚合日志文件和應(yīng)用程序事件的模式,該模式對(duì)事件進(jìn)行持續(xù)實(shí)時(shí)聚合,以用于欺詐檢測(cè)、告警、物聯(lián)網(wǎng)等。隨著Web訪問日志、廣告日志、審計(jì)日志和系統(tǒng)日志,以及傳感器數(shù)據(jù)等日志和數(shù)據(jù)越來越多,該模式的適用性越來越強(qiáng)。
該模式涉及從多個(gè)源數(shù)據(jù)聚合,統(tǒng)一為一個(gè)單一的流,并將其用于批處理或流分析。該模式分為兩個(gè)階段(如圖5-7所示)。

圖5-7:事件聚合模式的各個(gè)階段
1. 事件轉(zhuǎn)發(fā)
來自邊緣節(jié)點(diǎn)、日志服務(wù)器、物聯(lián)網(wǎng)傳感器等的事件和日志被轉(zhuǎn)發(fā)到聚合階段。安裝一個(gè)輕量級(jí)客戶端來實(shí)時(shí)推送日志。
2. 事件聚合
來自多個(gè)源數(shù)據(jù)的事件被規(guī)范化、轉(zhuǎn)換,并可用于一個(gè)或多個(gè)目標(biāo)數(shù)據(jù)。聚合是基于數(shù)據(jù)流的,事件流被緩存并定期上傳到目標(biāo)數(shù)據(jù)存儲(chǔ)。
該模式的一個(gè)流行實(shí)現(xiàn)是Apache Flume(https://oreil.ly/Dvyf_)。作為數(shù)據(jù)遷移的一部分,配置文件定義了事件源和數(shù)據(jù)聚合的目標(biāo)。Flume的源數(shù)據(jù)組件從源數(shù)據(jù)中獲取日志文件和事件,并將它們發(fā)送到聚合代理以進(jìn)行數(shù)據(jù)處理。日志聚合處理存儲(chǔ)在內(nèi)存中,并通過流傳輸?shù)侥康牡亍?/p>
Flume最初設(shè)計(jì)用于快速可靠地將Web服務(wù)器生成的大量日志文件傳輸?shù)紿adoop中。如今,它已經(jīng)發(fā)展成處理事件數(shù)據(jù)的工具,處理包括來自Kafka代理、Facebook和Twitter等來源的數(shù)據(jù)。其他流行的實(shí)現(xiàn)有Fluent Bit(https://fluentbit.io)和Fluentd(https://oreil.ly/FjUAB),它們主要被用作日志收集器和日志聚合器。
事件聚合模式的優(yōu)點(diǎn):
- 它是針對(duì)日志和事件且被優(yōu)化的實(shí)時(shí)解決方案,具有高可靠、高可用和高可伸縮(水平擴(kuò)展)的特性。
- 它對(duì)源數(shù)據(jù)性能的影響極小。
- 它具有高可擴(kuò)展性和高可定制性,并且開銷最小。
- 它支持在數(shù)據(jù)遷移過程中進(jìn)行過濾和數(shù)據(jù)轉(zhuǎn)換。
- 它可擴(kuò)展以支持處理大批量日志和事件數(shù)據(jù)。
事件聚合模式的缺點(diǎn):
- 它不保證源事件數(shù)據(jù)有序。
- 消息可以至少傳遞一次(而不是只傳遞一次),要求目標(biāo)數(shù)據(jù)處理重復(fù)事件。
總之,這種模式針對(duì)日志和事件數(shù)據(jù)進(jìn)行了優(yōu)化,雖然很容易入門,但它是為分析用例而設(shè)計(jì)的,可以處理無序以及重復(fù)的記錄。
- 數(shù)據(jù)存儲(chǔ)架構(gòu)與技術(shù)
- Building Computer Vision Projects with OpenCV 4 and C++
- 數(shù)據(jù)庫技術(shù)與應(yīng)用教程(Access)
- 大數(shù)據(jù)Hadoop 3.X分布式處理實(shí)戰(zhàn)
- 中國(guó)數(shù)字流域
- 數(shù)字媒體交互設(shè)計(jì)(初級(jí)):Web產(chǎn)品交互設(shè)計(jì)方法與案例
- Proxmox VE超融合集群實(shí)踐真?zhèn)?/a>
- HikariCP連接池實(shí)戰(zhàn)
- Mastering LOB Development for Silverlight 5:A Case Study in Action
- 大數(shù)據(jù)技術(shù)原理與應(yīng)用:概念、存儲(chǔ)、處理、分析與應(yīng)用
- 中文版Access 2007實(shí)例與操作
- Gideros Mobile Game Development
- 機(jī)器學(xué)習(xí):實(shí)用案例解析
- 數(shù)據(jù)庫查詢優(yōu)化器的藝術(shù):原理解析與SQL性能優(yōu)化
- 實(shí)現(xiàn)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)