天天看點

基于DTS的大資料同步,如何選擇最佳方案?

作者:楊建榮的學習筆記
基于DTS的大資料同步,如何選擇最佳方案?

一、前言

在《騰訊雲資料庫DTS釋出全新資料內建方案:全增量無縫同步,快速建構實時數倉》一文中,我們介紹了如何使用DTS的「資料同步」服務,将MySQL資料同步到Ckafka并應用于大資料場景中。讀者可能會産生疑問:DTS的「資料訂閱」服務也提供了類似的功能,那麼這兩者有何差別,實際使用時應如何選擇?為此,本文将為您詳細介紹相關内容。

二、為什麼會形成兩種

方案?

2.1 關于DTS

DTS是騰訊雲自主研發的資料庫傳輸服務工具,具有高傳輸性能、高可用、安全連接配接、操作便捷等特點,可以實作資料源在業務不停服狀态下的實時資料同步,整個資料同步過程對源庫業務沒有影響。

DTS提供了「資料遷移」、「資料同步」、「資料訂閱」三項服務,每個服務的定位和應用場景不同,可以滿足使用者不同的資料傳輸訴求。「資料遷移」主要用于資料庫搬遷,如雲下資料庫上雲的場景;「資料同步」主要用于兩個資料源的長期實時同步,如雙活、異地災備等場景;「資料訂閱」則是将源端資料變更同步到不确定的目标端,應用于緩存更新,大資料分析等場景。

基于DTS的大資料同步,如何選擇最佳方案?

DTS目前針對大資料內建場景提供了兩種技術方案:

方案一:采用「資料同步」服務,将源端的全量+增量資料同步到使用者自行維護的Ckafka中,再通過消費程式,将消息投遞到資料湖倉。

方案二:采用「資料訂閱」服務,将源端的增量資料同步到訂閱服務内置的Kafka中,使用者無需維護Kafka,隻需要建立并使用消費組,再通過消費程式,将消息投遞到資料湖倉。

為什麼會形成兩種方案,這就需要追溯DTS的曆史發展淵源。

2.2 資料訂閱

「資料訂閱」的設計初衷是為了滿足使用者在沒有明确下遊鍊路的情況下,能夠靈活地對接各種類型的下遊場景,比如資料倉庫、自定義處理程式等。為了簡化使用者操作,資料訂閱會将源庫的資料變更緩存在内置的Kafka中,進而實作“一站式”的資料同步,源庫和目标下遊之間隻需通過DTS連接配接,無需使用其他中間服務。

資料訂閱的具體實作如下(以MySQL為例):

基于DTS的大資料同步,如何選擇最佳方案?

資料訂閱中,DTS會模拟成MySQL的從庫,拉取源庫的增量Binlog,并将其解析後投遞到内置的Kafka中。但由于内置Kafka隻有一個預設的Topic,是以無法進行多Topic的投遞方式。

當我們收到使用者的大資料內建需求時,使用者提出一些新的訴求:

(1)需要将資料同步到他們自己的Kafka中。

(2)需要将資料投遞到Kafka的多Topic下。

(3)需要實作全量+增量資料的無縫同步。

基于現有的同步能力以及對使用者需求的深入調研,DTS團隊形成了到Kafka的資料同步方案,即采用全量+增量資料一起的同步方式,将資料源先同步到Ckafka,再從Ckafka消費資料投遞到資料湖倉。這樣也可以複用同步的部分核心能力,比如任務重試,即在資料同步過程中任務發生異常中斷,可以重試後繼續同步,無需從頭開始。

2.3 資料同步到Kafka

資料同步到Kafka的實作方案如下:

基于DTS的大資料同步,如何選擇最佳方案?

DTS會擷取源端的全量+增量資料,并将其無縫銜接同步到消息隊列CKafka中,由于目标端是使用者自己的Kafka,是以可靈活配置。同時,使用者也可在同步過程中設定投遞政策,如指定源庫中不同的表投遞到目标端不同的Topic中。

那這兩種方案在實際使用時如何選擇呢?接下來為您詳細介紹。

三、如何選擇資料同步

最佳方案?

資料同步到Kafka(以下簡稱方案一),與資料訂閱(以下簡稱方案二),兩者的實作原理類似,都可實時擷取源庫的資料變更,都可應用于資料歸檔、資料分析等場景中,但在實際應用中,應根據具體情況選擇最佳方案。

下圖對比了兩個方案的關鍵差别,如紅色字型所示。

基于DTS的大資料同步,如何選擇最佳方案?

我們也整理了這兩個方案各項差異的對比情況,如下表格所示。

基于DTS的大資料同步,如何選擇最佳方案?

下面我們結合使用場景,對關鍵的差異點進行詳細介紹。

3.1 全量+增量 VS 增量

如果使用者隻需要擷取新增日志,新增訂單等類似資訊,僅需要同步增量資料,可選擇方案二(方案一也可以,需再結合其他差異點對比)。如果使用者需要擷取源資料庫的曆史存量和新增的資料,則選擇方案一。

3.2 使用者是否有自己的Kafka

方案一中,使用者可以自行購買Ckafka,可靈活設定topic,比如建立多個Topic,将不同的表資料投遞到不同的Topic中。另外可以設定Kafka中資料的儲存時間和單個消息大小等參數。同時,使用者在消費的時候不受地域限制,具有較高的靈活性。

相比之下,在方案二中,目标端為内置的Kafka,使用者無需購買,節省Kafka的費用,但同時也無法修改Topic資訊,隻能将資料投遞到一個預設Topic中,通過自定義partition分區政策來滿足分區投遞和并發消費的需求。此外,消費時需要在騰訊雲網絡環境進行,且消費的地域需要與DTS訂閱任務的地域保持一緻。

3.3 成本&性能

方案一中,費用包括購買DTS同步任務和CKafka。不同的DTS同步任務規格有不同的傳輸性能需求,規格越高,費用越高。

方案二中,使用者僅需購買DTS訂閱任務,其中DTS訂閱任務提供通用的規格。

如果資料量大,對同步性能有要求,建議選擇方案一的高規格鍊路;如果對性能要求不高,建議計算成本後,選擇費用較低的一個方案即可。

四、應用案例

4.1 資料同步到Kafka

某教育行業使用者使用DTS将資料同步到Kafka,替代之前的Canal元件方案。使用者采用不同表寫入到不同Topic的形式,消費資料時每個Topic的資料獨立消費,最終實作了高性能傳輸和高穩定性保障,同時有效降低了運維成本。

  • 傳輸性能高:DTS的傳輸性能與使用者實際網絡延時、帶寬、資料庫本身的規格配置都有關系,在使用者源端和目标端規格都比較高,網絡無瓶頸的情況下,項目實測DTS全量階段的RPS(每秒同步行數)最高可達30萬/s,增量階段RPS最高可達1.5萬/s。
  • 穩定性強:DTS可提供高SLA保證,任務穩定性極強。
  • 運維成本低:使用者之前使用Canal元件時,平均每月大概需要投入半個人力到研發和運維。改用DTS後,任務配置完成後基本無需運維人員投入,大大降低了運維成本。

4.2 資料訂閱

某娛樂行業使用者使用DTS資料訂閱,替代之前的Flink CDC+MQ方案。改造後鍊路配置和維護便捷,資料無丢失。

  • 傳輸性能高:傳輸性能與源庫的配置、網絡帶寬等因素都有關系。使用者源端為騰訊雲資料庫且無壓力,在網絡無瓶頸,源庫僅為簡單事務操作,訂閱資料格式為ProtoBuf的場景下,RPS可達到2萬/s。
  • 傳輸延時低:從源庫寫入資料到下遊消費到資料的延時,與實際的網絡帶寬、源庫壓力、源庫資料的複雜程度都有關系。在源庫無壓力,網路無瓶頸的場景下,DTS訂閱任務的延時一般在100ms左右。
  • 穩定性強:訂閱任務提供高SLA保證,任務穩定性極強。
  • 資料無丢失:相比之前的Flink CDC,DTS訂閱可保證資料準确同步無丢失。

五、總結

DTS提供了兩種資料同步方案,兩種方案相輔相成,可以滿足使用者在大資料場景下的不同訴求。

  • 資料同步到kafka:适用于全量+增量資料同步,且目标端Kafka為使用者自己的Kafka,資料消費時不受騰訊雲網絡地域限制,支援同步資料到多Topic中。
  • 資料訂閱:适用于增量資料同步,目标端Kafka為DTS内置Kafka,需要在騰訊雲内網與DTS同地域的VPC中進行消費。

繼續閱讀