DRS的TiDB增量技術探索

      網(wǎng)友投稿 872 2025-04-04

      1 tidb Binlog

      tidb binlog為PingCap自定義格式的日志,非MySQL官方標準binlog。(參考官網(wǎng)文檔https://docs.pingcap.com/zh/tidb/v3.0/binlog-consumer-client )

      目前Drainer提供了很多輸出方式,通過對drainer進行配置實現(xiàn)日志直接回放到目標庫(MySQL、TiDB)以及日志落盤(File)的功能,此外為了滿足部分用戶自定義需求,增加輸出到kafka的功能,將TiDB日志以ProtoBuf定義數(shù)據(jù)結構輸出到消息隊列中,讓用戶業(yè)務端自行消費。官方提供了標準的binlog.proto文件,用戶可以在自己的代碼工程中通過proto官方工具生成解析代碼,便于使用。執(zhí)行以下操作自動生成代碼:

      protoc.exe --java_out=.binlog.proto

      2 TiDB Binlog組件

      TiDB binlog組件提供類似MySQL主從復制功能,其主要由PD(pump client)、pump 集群、drainer功能模塊構成。參考官方文檔:https://pingcap.com/blog-cn/tidb-ecosystem-tools-1/

      TiDB Server:每個事務的寫入伴隨著prewrite binlog以及commit binlog/rollback binlog,從而實現(xiàn)2pc算法。其中主要將commit_ts作為后續(xù)事務整合排序的關鍵,由PD模塊統(tǒng)一申請生成。

      Pump Client:維護Pump集群信息,通過心跳機制對pump節(jié)點探活,binlog寫請求分發(fā)中心,通過range、hash(start_ts)、score等路由策略將請求分到每個active pump中。其中還要遵循Commit binlog必須發(fā)送到它對應prewrite binlog的Pump原則。

      Pump:處理來自pump client的請求,并且負責binlog的存儲。Binlog數(shù)據(jù)順序寫入數(shù)據(jù)文件,同時通過內置leveldb保存binlog的元信息(ts、類型、長度、保存文件及文件中位置)。

      Drainer:TiDB通過Drainer組件來實現(xiàn)binlog對外輸出,目前支持:kafka(消息隊列)、文件(增量備份文件方式)、下游目標數(shù)據(jù)庫(MySQL系列)。該組件收集所有pump的binlog數(shù)據(jù),根據(jù)其commit_ts進行歸并排序,然后下發(fā)給下游。TiDB binlog和MySQL binlog一樣,DML操作日志本身不包含表結構信息,Drainer通過在內存中構建表結構快照,ddl的時候就回放,dml的時候就根據(jù)當前快照生成SQL。Drainer在下游回放SQL的時候,采用多協(xié)程的方式提高效率,并引入數(shù)據(jù)沖突檢測機制,保證數(shù)據(jù)一致性。

      3 tidb本地單機版(開啟binlog)環(huán)境搭建

      單機部署環(huán)境環(huán)境:Linux(隨便購買一臺ecs)+ mysql客戶端

      官方參考手冊 https://docs.pingcap.com/zh/tidb/dev/get-started-with-tidb-binlog

      1、下載

      wget http://download.pingcap.org/tidb-latest-linux-amd64.tar.gz

      2、解壓 tar -xzf tidb-latest-linux-amd64.tar.gz

      cd tidb-latest-linux-amd64/

      3、./bin/pd-server --config=pd.toml &>pd.out &

      //【pd.toml】 log-file="/data/tidb/logs/pd.log" data-dir="/data/tidb/pd.data"

      4、./bin/tikv-server --config=tikv.toml &>tikv.out &

      //【tikv.toml】 log-file="/data/tidb/logs/tikv.log" [storage] data-dir="/data/tidb/tikv.data" [pd] endpoints=["127.0.0.1:2379"] [rocksdb] max-open-files=1024 [raftdb] max-open-files=1024

      5、./bin/pump --config=pump.toml &>pump.out &

      //【pump.toml】 log-file="/data/tidb/logs/pump.log" data-dir="/data/tidb/pump.data" addr="127.0.0.1:8250" advertise-addr="127.0.0.1:8250" pd-urls="http://127.0.0.1:2379"

      6、sleep 3 && ./bin/tidb-server --config=tidb.toml &>tidb.out &

      //【tidb.toml】 store="tikv" path="127.0.0.1:2379" [log.file] filename="/data/tidb/logs/tidb.log" [binlog] enable=true

      7、./bin/drainer --config=drainer.toml &>drainer.out &(配置kafka的下游端)

      //【drainer.toml】 log-file="/data/tidb/logs/drainer.log" [syncer] db-type="kafka" [syncer.to] zookeeper-addrs = "10.154.218.217:2181" kafka-addrs = "10.154.218.217:9092" kafka-version = "1.1.0" kafka-max-messages = 1024 topic-name = "zlz"

      4 TiDB解析demo

      1、Main方法:

      2、Kafka解析成Binlog對象:

      3、proto解析結果:

      DRS的TiDB增量技術探索

      4、commit_ts是由PD根據(jù)物理時間和邏輯時間生成而來,根據(jù)其獲取正確的timestamp,后續(xù)可以根據(jù)這個值去做實時增量同步時延。根據(jù)源碼go語言用java實現(xiàn)。參考源碼:https://github.com/tikv/pd/blob/04ff28f436debac2c5655238b3189af0407145c8/pkg/tsoutil/tso.go#L28

      5 參考鏈接

      https://pingcap.com/blog-cn/tidb-ecosystem-tools-1/#TiDB-Binlog-源碼閱讀

      MySQL 數(shù)據(jù)復制服務 DRS

      版權聲明:本文內容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內刪除侵權內容。

      上一篇:如何給所有的幻燈片添加logo?(咋添加幻燈片)
      下一篇:圖標變成白的
      相關文章
      成a人片亚洲日本久久| 亚洲成A人片在线观看无码不卡| 亚洲国产精华液2020| 亚洲av之男人的天堂网站| 国产精品亚洲色婷婷99久久精品| 亚洲综合色婷婷在线观看| 亚洲人成网站看在线播放| 亚洲人成电影在线观看青青| 在线观看亚洲人成网站| 亚洲成色www久久网站夜月| 亚洲AV永久无码精品| 国产av无码专区亚洲av桃花庵| 亚洲中久无码永久在线观看同| av在线亚洲欧洲日产一区二区| 亚洲午夜精品一级在线播放放 | 亚洲视频在线免费观看| 亚洲AV无码久久| 亚洲伊人tv综合网色| 久久久无码精品亚洲日韩京东传媒| 麻豆亚洲AV永久无码精品久久 | 久久亚洲私人国产精品| 久久亚洲AV成人出白浆无码国产| 亚洲色成人网一二三区| 亚洲人成人77777网站不卡 | 亚洲同性男gay网站在线观看| 亚洲啪啪免费视频| 亚洲中文字幕乱码AV波多JI| 亚洲乱妇熟女爽到高潮的片| 国产亚洲人成在线播放| 亚洲精品无码日韩国产不卡?V| 国产亚洲美女精品久久久| 亚洲码国产精品高潮在线| 亚洲AV日韩精品久久久久久久| 亚洲综合国产精品| 亚洲AV综合色区无码二区偷拍| 亚洲精品无码久久久久秋霞| 国产精品亚洲一区二区无码| 亚洲裸男gv网站| 亚洲国产a∨无码中文777| 中文字幕亚洲免费无线观看日本| 亚洲伊人久久大香线蕉|