91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Delta Lake如何實現CDC實時入湖

發布時間:2021-12-23 18:56:01 來源:億速云 閱讀:406 作者:柒染 欄目:云計算

Delta Lake如何實現CDC實時入湖,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

什么是CDC

Change Data Capture(CDC)用來跟蹤捕獲數據源的數據變化,并將這些變化同步到目標存儲(如數據湖或數據倉庫),用于數據備份或后續分析,同步過程可以是分鐘/小時/天等粒度,也可以是實時同步。CDC方案分為侵入式(intrusive manner)和非傾入性(non-intrusive manner)兩種。

Delta Lake如何實現CDC實時入湖

侵入式

侵入式方案直接請求數據源系統(如通過JDBC讀取數據),會給數據源系統帶來性能壓力。常見的方案如下:

  • 最后更新時間(Last Modified)

源表需要有修改時間列,同步作業需要指定最后修改時間參數,表明同步某個時間點之后變更的數據。該方法不能同步刪除記錄的變更,同一條記錄多次變更只能記錄最后一次。

  • 自增id列

源表需要有一個自增id列,同步作業需要指定上次同步的最大id值,同步上次之后新增的記錄行。該方法也不能同步刪除記錄的變更,而且老記錄的變更也無法感知。

非侵入式

非侵入性一般通過日志的方式記錄數據源的數據變化(如數據庫的binlog),源庫需要開啟binlog的功能。數據源的每次操作都會被記錄到binlog中(如insert/update/delete等),能夠實時跟蹤數據插入/刪除/數據多次更新/DDL操作等。

示例:

insert into table testdb.test values("hangzhou",1);update testdb.test set b=2 where a="hangzhou";update testdb.test set b=3 where a="hangzhou";delete from testdb.test where a="hangzhou";

通過將binlog日志有序的回放到目標存儲中,從而實現對數據源的數據導出同步功能。

常見的CDC方案實現

開源常見的CDC方案實現主要有兩種:

Sqoop離線同步

sqoop是一個開源的數據同步工具,它可以將數據庫的數據同步到HDFS/Hive中,支持全量同步和增量同步,用戶可以配置小時/天的調度作業來定時同步數據。

sqoop增量同步是一種侵入式的CDC方案,支持Last Modified和Append模式。
Delta Lake如何實現CDC實時入湖

缺點:

  • 直接jdbc請求源庫拉取數據,影響源庫性能

  • 小時/天調度,實時性不高

  • 無法同步源庫的刪除操作,Append模式還不支持數據更新操作

binlog實時同步

binlog日志可以通過一些工具實時同步到kafka等消息中間件中,然后通過Spark/Flink等流引擎實時的回放binlog到目標存儲(如Kudu/HBase等)。

缺點:

  • Kudu/HBase運維成本高

  • Kudu在數據量大的有穩定性問題, HBase不支持高吞吐的分析

  • Spark Streaming實現回放binlog邏輯復雜,使用java/scala代碼具有一定門檻

Streaming SQL+Delta Lake實時入湖方案

前面介紹了兩種常見的CDC方案,各自都有一些缺點。阿里云E-MapReduce團隊提供了一種新的CDC解決方案,利用自研的Streaming SQL搭配Delta Lake可以輕松實現CDC實時入湖。這套解決方案同時通過阿里云最新發布的數據湖構建(Data Lake Formation,DLF)服務提供一站式的入湖體驗。

Delta Lake如何實現CDC實時入湖

Streaming SQL

Spark Streaming SQL在Spark Structured Streaming之上提供了SQL能力,降低了實時業務開發的門檻,使得離線業務實時化更簡單方便。


下面以實時消費SLS為例:

# 創建loghub源表
spark-sql> CREATE TABLE loghub_intput_tbl(content string)
         > USING loghub
         > OPTIONS
         > (...) 
# 創建delta目標表
spark-sql> CREATE TABLE delta_output_tbl(content string)
         > USING delta
         > OPTIONS
         > (...);
# 創建流式SCAN
spark-sql> CREATE SCAN loghub_table_intput_test_stream
         > ON loghub_intput_tbl
         > USING STREAM;
# 將loghub源表數據插入delta目標表         
spark-sql> INSERT INTO delta_output_tbl SELECT content FROM loghub_table_intput_test_stream;

Delta Lake

Delta Lake是Databricks開源的一種數據湖格式,它在parquet格式之上,提供了ACID事務/元數據管理等能力,同時相比parquet具有更好的性能,能夠支持更豐富的數據應用場景(如數據更新/schema演化等)。

Delta Lake如何實現CDC實時入湖

E-MapReduce團隊在開源Delta Lake基礎上做了很多功能和性能的優化,如小文件合并Optimize/DataSkipping/Zorder,SparkSQL/Streaming SQL/Hive/Presto深度集成Delta等。

Streaming SQL+Delta Lake CDC實時入湖

Spark Streaming SQL提供了Merge Into 的語法,搭配Delta Lake的實時寫入能力,可以很方便的實現CDC實時入湖方案。

Delta Lake如何實現CDC實時入湖

如上圖所示,只需要SQL就能完成CDC實時入湖。

看完上述內容,你們掌握Delta Lake如何實現CDC實時入湖的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳朔县| 保山市| 重庆市| 奈曼旗| 临朐县| 宁城县| 华亭县| 建宁县| 清河县| 东阿县| 黔南| 兰溪市| 朔州市| 枣阳市| 吴忠市| 呼和浩特市| 玉溪市| 滕州市| 乌兰县| 获嘉县| 雷山县| 榕江县| 兴文县| 锦屏县| 普宁市| 桂阳县| 诸城市| 西城区| 三穗县| 仪征市| 陈巴尔虎旗| 棋牌| 新蔡县| 新民市| 桑日县| 容城县| 清镇市| 若尔盖县| 赤壁市| 临夏市| 平度市|