穀歌Datastream數據集成與三角洲湖變化數據捕獲
2022年2月3日 在合作夥伴
這是一個數據團隊之間beplay娱乐ios的協作後Badal,穀歌和磚。我們感謝尤金Miretsky、夥伴和史蒂文•Deutscher-Kobayashi高級數據工程師,Badal, Margolin Etai,產品經理,穀歌,因為他們的貢獻。
理解的關鍵操作數據庫捕獲業務事務的當前狀態。有實時的見解為您的業務是如何執行允許數據團隊快速進行業務決策以應對市場狀況。
磚提供了一個管理雲平台分析收集的數據從源係統,包括操作數據庫,實時。Beplay体育安卓版本與磚Lakehouse平台Beplay体育安卓版本,你可以將你所有的數據存儲在一個安全的、開放的lakehouse架構相結合最好的數據倉庫和數據湖泊統一所有的分析和人工智能工作負載。今天,我們很高興分享我們的合作夥伴Badal.io釋放他們穀歌Datastream三角洲湖連接器,使變化數據捕獲(CDC) MySQL和Oracle關係數據庫。疾病預防控製中心是一個基於軟件的過程,識別和跟蹤更改源數據管理係統中的數據,如關係數據庫(RDBMS)。疾病預防控製中心可以提供實時活動數據通過處理數據不斷新數據庫事件的發生。
為什麼基於疾病預防控製中心
基於疾病預防控製中心是一個傳統的批量數據攝入的替代方法。它讀取數據庫的本地事務日誌(有時稱為重做或二進製日誌),並提供實時或近實時數據流的變化不斷的複製到目標隨著事件的發生。
美國疾病控製與預防中心提供了以下好處:
- 簡化的攝入:批攝入通常需要親密的源數據模型來處理知識增量上傳和刪除;數據工程師需要與領域專家合作,為每個表配置攝入。疾控中心減少攝取新的數據集的時間和成本。
- 實時數據:疾控中心流變化與秒或分鍾延遲,使各種實時的用例,如接近實時的儀表板、數據庫複製和實時分析。
- 最小中斷生產工作負載:而定期批量攝取利用數據庫資源查詢數據,疾控中心從數據庫中讀取變化的重做或歸檔日誌,導致最低消費的資源。
- 基於事件的架構:Microservices可以訂閱數據庫以事件的形式的變化。然後microservices可以建立自己的觀點,緩存和索引,同時保持數據一致性。
為什麼Datastream數據
穀歌雲數據流是一個易於使用的CDC和複製服務,允許您跨異構數據庫同步數據,存儲係統和應用程序可靠和以最小的延遲。
數據流的好處包括:
- Serverless,所以沒有資源或管理規定,和服務自動上下尺度。
- 易於使用的設置和監測經驗實現價值的超級快
- 安全與私人連通性選項和安全,你期望從穀歌雲,沒有影響到源數據庫。
- 準確和可靠透明的狀態報告和健壯的處理靈活性的數據和模式的變化。
- 數據寫入到目的地是歸一化到一個unified-type模式。這意味著下遊消費者幾乎完全source-agnostic,使它一個簡單的解決方案,無疑是可伸縮的支持範圍廣泛的不同來源。
連接器設計
Badal.io和磚合作寫一Datastream數據連接器為三角洲湖。
體係結構
Datastream數據寫更改日誌記錄文件在穀歌雲存儲(GCS) avro或JSON格式的文件。datastream-delta連接器使用火花結構化流讀取文件作為他們到達和小溪三角洲湖表。
連接器創建兩個三角洲湖每個源表的表:
- Staging表:此表包含每一個變化,是開始以來的源數據庫複製。每一行代表一個數據流DML語句(插入、更新、刪除)。它可以重播重建數據庫的狀態在任何給定的點過去。下麵是一個例子,staging表。
read_timestamp | source_timestamp | 對象 | source_metadata | 有效載荷 |
---|---|---|---|---|
2021-05-16 T00:40:05.000 + 0000 |
2021-05-16 T00:40:05.000 + 0000 |
demo_inventory。 選民 |
{“表”:“inventory.voters”,“數據庫”:“演示”, “primary_keys”:“id”,“log_file”:“mysql-bin.000002”, “log_position”: 27105167,“change_type” :“插入”、“is_deleted”:假} |
{" id ":“743621506”、“名稱”:“先生。約書亞傑克遜”、“地址”:“567傑西卡平原貼切。106 \ nWhitestad,你好51614”、“性別”:“t”} |
2021-05-16 T00:40:06.000 + 0000 |
2021-05-16 T00:40:06.000 + 0000 |
demo_inventory。 選民 |
{“表”:“inventory.voters”,“數據庫”:“演示”, “primary_keys”:“id”,“log_file”:“mysql-bin.000002”, “log_position”: 27105800,“change_type”: “更新”、“is_deleted”:假} |
{" id ":“299594688”、“名稱”:“羅納德·斯托克斯”、“地址”:“珍妮弗·伯格940 133套房\ nRyanfurt AR 92355”,“性別”:“m”} |
2021-05-16 T00:40:07.000 + 0000 |
2021-05-16 T00:40:07.000 + 0000 |
demo_inventory。 選民 |
{“表”:“inventory.voters”,“數據庫”:“演示”, “primary_keys”:“id”,“log_file”:“mysql-bin.000002”, “log_position”: 27106451,“change_type”: “刪除”、“is_deleted”:假} |
{" id ":“830510405”、“名稱”:“托馬斯·奧爾森”,“地址”:“2545年克魯茲分支552套房\ nw Edgarton,肯塔基州91433”,“性別”:“n”} |
- 目標表:包含最新的源表的快照。
id | 的名字 | 地址 | 性別 | datastream_metadata _source_timestamp |
datastream_metadata _source_metadata_log 帶有_file |
datastream_metadata _source_metadata_log _position |
---|---|---|---|---|---|---|
207846446 | 邁克爾•湯普森 | 508波特山 | 米 | 2021-05-16 T00:21:02.000 + 0000 |
mysql-bin.000002 | 26319210 |
289483866 | 勞倫·詹寧斯 | 03347年布朗群島 | t | 2021-05-16 T02:55:40.000 + 0000 |
mysql-bin.000002 | 31366461 |
308466169 | 帕特裏夏·萊利 | 991年弗雷德裏克大壩 | t | 2021-05-16 T00:59:59.000 + 0000 |
mysql-bin.000002 | 27931699 |
348656975 | 萊利博士喜怒無常 | 89422年德溫脊 | t | 2021-05-16 T00:08:32.000 + 0000 |
mysql-bin.000002 | 25820266 |
385058605 | 伊麗莎白·吉爾 | 728多蘿西鎖 | f | 2021-05-16 T00:18:47.000 + 0000 |
mysql-bin.000002 | 26226299 |
連接器打破了數據攝取到一個多步驟的過程:
- 掃描GCS發現所有活躍的表。Datastream數據存儲在一個單獨的每個表的子目錄。
- 解析表元數據來創建一個新的三角洲湖如果所需的數據庫和表。
- 初始化兩個流為每個表:
- 結構化流從一個gc來源
- 結構化流用δ表源
- 修改分期的模式和目標表如果是不同於當前micro-batch的模式。Staging表模式是使用三角洲湖自動遷移模式遷移特性修改,目標表模式以編程方式在執行MERGE語句之前。
- 流的變化(為每個表)到一個臨時表。staging表是一個擴展表,存儲更改日誌行,每一行代表一個DML語句(插入、更新、刪除)。
- 流變化從暫存表,並將它們合並到最終表使用三角洲湖MERGE語句。
表元數據發現
Datastream數據發送每個事件所需的所有元數據操作:表模式,主鍵,排序鍵、數據庫、表信息,等等。
因此,用戶不需要提供額外的配置為每個表他們想攝取。相反,表這裏用處不大,所有相關信息提取每一批的事件。這包括:
- 表和數據庫名稱
- 表模式
- 主鍵,排序鍵在merge語句中使用。
合並邏輯
這一節將描述如何合並操作在一個高層次的工作。這段代碼執行的圖書館和用戶還沒有實現。合並到目標表需要小心設計,以確保所有更新的記錄正確,特別是:
- 記錄代表相同的實體標識正確使用主鍵。
- 如果一個micro-batch有多個條目相同的記錄,隻有使用最新的條目。
- 無序的記錄妥善處理通過比較在目標表的時間戳記錄在批記錄,並使用最新版本。
- 刪除記錄被妥善處理。
首先,對於每個microbatch,我們執行一個操作,比如:
選擇*排名()在(分區通過pkey1, pkey2訂單通過source_timestamp source_metadata。log_file, source_metadata.log_position)作為row_number從T_STAGING。*在哪裏row_number=1
然後合並操作與以下SQL執行:
合並成target_table作為t使用staging_table作為年代在t.pKey1=s.pKey1和t.pKey2=s.pKey2當匹配和t.datastream_metadata_source_timestamp
壓實和清理
流工作負載會導致次優的鑲花的大小文件被寫入。通常情況下,如果數據量不夠大,寫小文件之間需要進行權衡和增加流延遲允許積累更多的數據寫。小文件可能導致退化的閱讀和合並的性能,因為工作需要掃描的文件。
進一步,合並查詢往往導致大量未使用的數據當新更新的條目記錄覆蓋舊的條目。未使用的記錄不會影響查詢的正確性,但降低疾病預防控製中心和用戶查詢性能。
為了緩解這個問題,用戶被鼓勵去做下列之一:
- 如果使用磚集群管理,最好的選擇是使用自動優化和壓實優化文件大小
- 安排定期查詢調用優化和真空
- 使用連接器的內置功能合並分區寫入目標表之前,通過設置DELTA_MICROBATCH_PARTITIONS選項。這是一個簡化和有效版本使用Databrick自動最優化。
為什麼構建Lakehouse三角洲湖
三角洲湖是一個開源項目構建湖泊的可靠數據,您可以很容易地管理和規模數十億美元的文件。三角洲湖使用開源Apache鑲花的柱狀文件格式的數據可以存儲在雲對象存儲,包括穀歌雲存儲(GCS), Azure Blob存儲Azure數據存儲(ADLS)湖,AWS簡單存儲服務(S3)和Hadoop分布式文件係統(HDFS)。成千上萬的組織使用三角洲湖作為企業的基礎數據和分析平台。Beplay体育安卓版本數據可靠性、可伸縮性和治理湖泊三角洲湖通過以下的特性:
- ACID事務為Apache火花工作負載:可序列化的隔離級別確保多個並發的讀者和作家可以並行操作,從來沒有看到不一致的數據。支持合並,更新和刪除操作,使複雜用例變更數據獲取、slowly-changing-dimension (SCD)操作和流媒體插入。
- 可擴展的元數據處理:可以處理數十億的分區和文件組成的大型表自在。
- 模式執行:在閱讀是有用的在特定情況下,但這可能導致低質量的數據和報告異常。三角洲湖能夠指定一個模式和執行。
- 審計曆史:一個事務日誌記錄所有更改數據執行的操作提供一個完整的審計跟蹤,由世衛組織、當等等。
- 時間旅行:數據版本控製使回滾時間點恢複來恢複數據。
三角洲湖完全兼容Apache火花api,因此您可以使用它與現有的數據管道用最小的變化。磚提供了一個管理雲服務來構建數據湖和運行您的分析工作負載與三角洲湖幾個額外的性能特性:
- 光子執行引擎:新執行引擎,提供極快的性能和Apache火花api兼容。
- 數據跳過索引:創建文件級別的統計數據,以避免掃描的文件不包含相關的數據。想象數百萬文件包含銷售數據,但隻有一打文件包含你所需要的實際信息。跳過數據索引,優化器將確切地知道哪些文件閱讀和跳過休息,從而避免了數以百萬計的文件的掃描。
- 文件壓縮(裝箱):提高閱讀的速度由小的文件合並成更大的查詢。數據湖泊可以積累大量的小文件,特別是當數據流和增量更新。小文件導致讀操作是緩慢的。合並小文件通過壓縮減少更大的湖是一個關鍵數據維護技術,快速的讀訪問權。
- z值:在同一組文件相關領域減少需要讀取的數據量。
- 布隆過濾器索引:快速搜索數十億行測試中加入一個元素集。
首先,訪問穀歌Datastream三角洲湖連接器GitHub的項目。如果你不已經有一個磚賬戶,然後試著磚免費的。