日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TiCDC系列分享-01-简述产生背景及使用概况

發(fā)布時(shí)間:2024/1/8 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TiCDC系列分享-01-简述产生背景及使用概况 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

\n> 原文來源: https://tidb.net/blog/70588c4c \n\n## 一、項(xiàng)目背景

如 PingCAP 官網(wǎng) 所述,TiCDC 的使用場(chǎng)景主要有 “數(shù)據(jù)庫災(zāi)備” “數(shù)據(jù)集成” 。熟悉 TiDB 周邊生態(tài)的愛好者一定知道 “TiDB Binlog” 這一與 TiCDC 功能相似的工具, 那么為什么要重復(fù)工作呢?

答案是 “TiDB Binlog” 無法存在以下(非全部)種種問題,對(duì)于 “TiDB Binlog” 還不熟悉的伙伴參考 TiDB Binlog 簡(jiǎn)介 :

1. “TiDB Binlog” 擴(kuò)展性差,如:Drainer 存在 “單點(diǎn)” 、“性能” 問題,拆分 Drainer 無法保證 “數(shù)據(jù)行變更有序性”;

2. “TiDB Binlog” 性能低下,如:“TiDB Binlog” 僅支持單 kafka 單 partition 寫入,無法提高 kafka 吞吐量;

3. “TiDB Binlog” 通用型差,如:binlog 寫成文件需要使用 Reparo 解析 SQL 語句,不支持 Maxwell 等通用協(xié)議;

4. “TiDB Binlog” 同步痛點(diǎn),如:binlog 寫到下游受限制多,如 Pump 的 gRPC message 超過限值 等等;

5. “TiDB Binlog” 可用性差,如:單點(diǎn)的 Drainer 一旦出現(xiàn)問題同步將中斷,不存在一定程度的自愈功能;

由此 TiCDC 應(yīng)運(yùn)而生,通過直接捕獲 TiKV Change Log ,將表作為拆分單元調(diào)度至各 Capture 中,并發(fā)向下游同步數(shù)據(jù)解決擴(kuò)展性問題。可 kafka 多 partition 寫入,并支持 Maxwell、Canal 等多種通用協(xié)議,解決同步性能、生態(tài)通用性問題。當(dāng)同步超時(shí)、 Capture 同步表數(shù)量不均、Capture 掛掉等情況時(shí),TiCDC 存在調(diào)度機(jī)制及 At Least Once 保證冪等的數(shù)據(jù)完整性前提下,調(diào)度實(shí)現(xiàn)自愈合。

二、工具位置

首先,熟知 TiCDC 使用方法,必先明確其在 TiDB 生態(tài)工具所處的位置及作用。

1. 作用而言 :數(shù)據(jù)庫如果是個(gè)只進(jìn)不出的 “貔貅” ,那么必將被市場(chǎng)所拋棄,也就是所謂的 “數(shù)據(jù)孤島” ,TiCDC 兼顧同步性能、數(shù)據(jù)完整性,一致性、生態(tài)通用性,實(shí)現(xiàn)了數(shù)據(jù)從 "流入-> TiDB ->流出" 的閉環(huán)。此外,談性能如果拋棄了場(chǎng)景(不深入討論),那就是在耍流氓,沒有任何一個(gè)款產(chǎn)品能完勝所有場(chǎng)景,TiDB 同樣也有自己的舒適區(qū)、痛點(diǎn)區(qū)。 有了 TiCDC 之后,用戶可以輕松實(shí)現(xiàn)數(shù)據(jù)的流轉(zhuǎn),把 TiDB 用在使用場(chǎng)景的舒適區(qū)。

2. 位置而言 :TiCDC 介于 TiDB 與下游目的端之間,下游包含兼用 MySQL 通許協(xié)議的所有產(chǎn)品、平臺(tái)(如:TiDB、MySQL、RDS、三方云平臺(tái)等)。用戶還可基于通用消息隊(duì)列輸出協(xié)議自定義開發(fā),現(xiàn) TiCDC 支持的協(xié)議有:Open Protocol 、Canal-JSON 、 Canal 、Avro 、 Maxwell 等協(xié)議,有些協(xié)議僅部分支持,詳情參考 --> TiCDC 支持的協(xié)議指南 。

其次,TiCDC 幾乎囊括所有主流 “數(shù)據(jù)同步” 的使用場(chǎng)景,下圖便是 “MySQL --> TiDB --> Others” 的經(jīng)典組合拳。至于其他協(xié)議的數(shù)據(jù)庫(Oracle、PG)如何流入 TiDB,等同于如何流入 MySQL,因?yàn)?TiDB 兼容 MySQL 通訊協(xié)議,一定存在較成熟的解決方案。

三、使用情況

注意:下述公司均通過 AskTUG 搜索相關(guān)文章得到,即:分享文章中有提及該公司正在使用 TICDC。下述公司僅是通過搜索手段可得知的公司,還有許多商業(yè)客戶要求不對(duì)外透露、或還未來得及透露。

3.1 小紅書

從 張億皓老師 在 【PingCAP Infra Meetup】No.131 TiCDC 的生態(tài)和社區(qū)建設(shè) 中分享可知,小紅書基于 TiCDC 在業(yè)務(wù)中進(jìn)行內(nèi)容審核、筆記標(biāo)簽推薦、增長(zhǎng)審計(jì)。實(shí)現(xiàn)如下圖,基于 "TiDB --> TiCDC --> Kafka --> Flink --> TiDB" 這樣一條鏈路實(shí)現(xiàn)與架構(gòu)中其他數(shù)據(jù)源的聚合計(jì)算。

3.2 海爾智家

從 姚翔老師 在 【PingCAP Infra Meetup】No.131 TiCDC 的生態(tài)和社區(qū)建設(shè) 中分享可知,海爾智家基于 TICDC 在業(yè)務(wù)中進(jìn)行搜索、推薦。將用戶數(shù)據(jù)、生活家信息數(shù)據(jù)基于 "TiDB --> TiCDC --> Kafka --> ES" 這樣一條鏈路實(shí)現(xiàn) Kafka 日消費(fèi)量在 300 萬左右的近實(shí)時(shí)搜索功能。從描述中可知截止 2019-09-19 分享時(shí), TiCDC 在不涉及表數(shù)量、LOB 字段、網(wǎng)絡(luò)延時(shí)等細(xì)節(jié)情況下,同步能力邊界為:正常同步在 “毫秒” 級(jí),抖動(dòng)情況下在 “秒級(jí)”(10s 以內(nèi))。 此外,從 Github -- Question and Bug Reports 中可以看出 TiCDC 存在 mqSink flushes data synchronously,casing low performance 、 Poor incremental scan performance where they are frequent insertions 、 improve performance of syncer 等多個(gè)提升同步性能的 RoadMap,對(duì)于 TiCDC 的同步性能是一個(gè)持續(xù)優(yōu)化的過程。

3.3 360

從 代曉磊老師 在 BLOG - TiCDC 應(yīng)用場(chǎng)景解析 中分享可知,360 基于 TiCDC 實(shí)現(xiàn)并參與立項(xiàng) 增量數(shù)據(jù)抽取、同城雙集群熱備、流處理求 的需求。

四、使用方法

4.1 部署 TiCDC

下述測(cè)試環(huán)境搭建 TiCDC ,目的測(cè)試、學(xué)習(xí) TiCDC 同步功能。 172.16.6.155:8300 及 172.16.6.196:8300 的 CDC 組件會(huì)在擴(kuò)容后出現(xiàn)。

[tidb@Linux-Hostname ~]$ tiup cluster display tidb-testID Role Host Ports OS/Arch Status Data Dir Deploy Dir -- ---- ---- ----- ------- ------ -------- ---------- 172.16.6.155:9093 alertmanager 172.16.6.155 9093/9094 linux/x86_64 Up /home/data/tidb-home/data/alertmanager-9093 /home/data/tidb-deploy/alertmanager-9093 172.16.6.155:8300 cdc 172.16.6.155 8300 linux/x86_64 Up /data/deploy/install/data/cdc-8300 /home/data/tidb-deploy/cdc-8300 172.16.6.196:8300 cdc 172.16.6.196 8300 linux/x86_64 Up /data/deploy/install/data/cdc-8300 /home/data/tidb-deploy/cdc-8300 172.16.6.155:3000 grafana 172.16.6.155 3000 linux/x86_64 Up - /home/data/tidb-deploy/grafana-3000 172.16.6.155:2379 pd 172.16.6.155 2379/2380 linux/x86_64 Up|UI /home/data/tidb-home/data/pd-2379 /home/data/tidb-deploy/pd-2379 172.16.6.194:2379 pd 172.16.6.194 2379/2380 linux/x86_64 Up /home/data/tidb-home/data/pd-2379 /home/data/tidb-deploy/pd-2379 172.16.6.196:2379 pd 172.16.6.196 2379/2380 linux/x86_64 Up|L /home/data/tidb-home/data/pd-2379 /home/data/tidb-deploy/pd-2379 172.16.6.155:9090 prometheus 172.16.6.155 9090/12020 linux/x86_64 Up /home/data/tidb-home/data/prometheus-9090 /home/data/tidb-deploy/prometheus-9090 172.16.6.155:4000 tidb 172.16.6.155 4000/10080 linux/x86_64 Up - /home/data/tidb-deploy/tidb-4000 172.16.6.196:4000 tidb 172.16.6.196 4000/10080 linux/x86_64 Up - /home/data/tidb-deploy/tidb-4000 172.16.6.155:20160 tikv 172.16.6.155 20160/20180 linux/x86_64 Up /home/data/tidb-home/data/tikv-20160 /home/data/tidb-deploy/tikv-20160 172.16.6.194:20160 tikv 172.16.6.194 20160/20180 linux/x86_64 Up /home/data/tidb-home/data/tikv-20160 /home/data/tidb-deploy/tikv-20160 172.16.6.196:20160 tikv 172.16.6.196 20160/20180 linux/x86_64 Up /home/data/tidb-home/data/tikv-20160 /home/data/tidb-deploy/tikv-20160

TiCDC 在 4.0.6 版本 GA,建議使用 4.0.6 及以后的版本 ,詳情參考 --> TiCDC 官方文檔 ,擴(kuò)容步驟如下。

[tidb@Linux-Hostname ~]$ cat scale-out-cdc.yaml cdc_servers:- host: 172.16.6.155gc-ttl: 86400data_dir: /data/deploy/install/data/cdc-8300- host: 172.16.6.196gc-ttl: 86400data_dir: /data/deploy/install/data/cdc-8300[tidb@Linux-Hostname ~]$ tiup cluster scale-out tidb-test scale-out-cdc.yaml

4.2 同步至 Kafka

由于本人之前沒接觸過 kafka ,本著熟悉 TiCDC 也要了解其周邊工具的目的,從 kafka 官網(wǎng) 進(jìn)行了簡(jiǎn)單入門,如有任何正確性問題可及時(shí)評(píng)論區(qū)交流。

簡(jiǎn)單了解后,個(gè)人覺得 kafka 類似 GoLang 中的 Channel,區(qū)別在于提供了高性能的、分布式的、高可用的、彈性的、容錯(cuò)的、安全的 “事件流平臺(tái)” 服務(wù)。 kafka 官網(wǎng)介紹其事件流式處理機(jī)制如下圖所示,Topic 作為分發(fā)消費(fèi)的邏輯單元,Partition 作為最小存儲(chǔ)單元,以 Hash Key 或其他策略將 Event 劃分到多個(gè) Partition 中,提供高吞吐性能。

下面簡(jiǎn)單試用下 kafka,操作步驟如下,目的為從 kafka 中解析出 TiCDC 分發(fā)給 kafka 的消息,不深入研究 kafka 體系及調(diào)優(yōu)。

# 安裝 Java 運(yùn)行環(huán)境 [tidb@kafka1 ~]$ yum install java-1.8.0-openjdk.x86_64 [tidb@kafka1 ~]$ java -version openjdk version "1.8.0_322"# 依據(jù) kafka quickstart 在 172.16.6.155、172.16.6.196 兩個(gè) server 架起 kafka [tidb@kafka1 ~]$ wget https://dlcdn.apache.org/kafka/3.1.0/kafka_2.13-3.1g/kafka/3.1.0/kafka_2.13-3.1.0.tgz --no-check-certificate [tidb@kafka1 ~]$ tar -xzf kafka_2.13-3.1.0.tgz [tidb@kafka1 ~]$ cd kafka_2.13-3.1.0 [tidb@kafka1 ~]$ bin/zookeeper-server-start.sh config/zookeeper.properties [tidb@kafka1 ~]$ bin/kafka-server-start.sh config/server.properties# 創(chuàng)建 partition 為 2、topic-name 為 tidb-test 的 topic [tidb@kafka1 ~]$ bin/kafka-topics.sh --create --topic tidb-test \--bootstrap-server 172.16.6.155:9092,172.16.6.196:9092 \--partitions 2 Created topic quickstart-events.# 查看 topic-name 為 tidb-test 的 topic 的配置情況,可以看到 partition 為 2 [tidb@kafka1 ~]$ bin/kafka-topics.sh --describe --topic tidb-test \--bootstrap-server 172.16.6.155:9092,172.16.6.196:9092 Topic: tidb-test TopicId: OjM6FFrBQtqyEB4sVWmYCQ PartitionCount: 2 ReplicationFactor: 1 Configs: segment.bytes=1073741824Topic: tidb-test Partition: 0 Leader: 0 Replicas: 0 Isr: 0Topic: tidb-test Partition: 1 Leader: 0 Replicas: 0 Isr: 0# 創(chuàng)建 TiCDC 到 kafka 的 changefeed 同步,并復(fù)用手動(dòng)創(chuàng)建的 tidb-test topic [tidb@kafka1 ~]$ tiup cdc cli changefeed create --pd=http://172.16.6.155:2379 \--sink-uri="kafka://172.16.6.155:9092/tidb-test?protocol=canal-json&kafka-version=2.4.0&partition-num=2&max-message-bytes=67108864&replication-factor=1" tiup is checking updates for component cdc ... Starting component `cdc`: /home/tidb/.tiup/components/cdc/v6.0.0/cdc /home/tidb/.tiup/components/cdc/v6.0.0/cdc cli changefeed create --pd=http://172.16.6.155:2379 --sink-uri=kafka://172.16.6.155:9092/tidb-test?protocol=canal-json&kafka-version=2.4.0&partition-num=2&max-message-bytes=67108864&replication-factor=1 [2022/05/12 16:37:09.667 +08:00] [WARN] [kafka.go:416] ["topic's `max.message.bytes` less than the `max-message-bytes`,use topic's `max.message.bytes` to initialize the Kafka producer"] [max.message.bytes=1048588] [max-message-bytes=67108864] [2022/05/12 16:37:09.667 +08:00] [WARN] [kafka.go:425] ["topic already exist, TiCDC will not create the topic"] [topic=tidb-test] [detail="{\"NumPartitions\":2,\"ReplicationFactor\":1,\"ReplicaAssignment\":{\"0\":[0],\"1\":[0]},\"ConfigEntries\":{\"segment.bytes\":\"1073741824\"}}"] Create changefeed successfully! ......# 利用 sysbench 向 jan.sbtest1 中插入 2 行數(shù)據(jù) [tidb@kafka1 ~]$ sysbench oltp_read_write --mysql-host=127.0.0.1 \--mysql-port=4000 \--mysql-db=jan \--mysql-user=root \--mysql-password= \--table_size=2 \--tables=1 prepare# 從 kafka 中解析 TiDB 的數(shù)據(jù)變更如下 [tidb@kafka1 ~]$ bin/kafka-console-consumer.sh --topic tidb-test \--from-beginning --bootstrap-server 172.16.6.155:9092,172.16.6.196:9092 {"id":0,"database":"jan","table":"sbtest1","pkNames":["id"],"isDdl":false,"type":"INSERT","es":1652344970654,"ts":1652344977538,"sql":"","sqlType":{"c":1,"id":4,"k":4,"pad":1},"mysqlType":{"c":"char","id":"int","k":"int","pad":"char"},"data":[{"c":"83868641912-28773972837-60736120486-75162659906-27563526494-20381887404-41576422241-93426793964-56405065102-33518432330","id":"1","k":"1","pad":"67847967377-48000963322-62604785301-91415491898-96926520291"}],"old":null} {"id":0,"database":"jan","table":"sbtest1","pkNames":["id"],"isDdl":false,"type":"INSERT","es":1652344970654,"ts":1652344977538,"sql":"","sqlType":{"c":1,"id":4,"k":4,"pad":1},"mysqlType":{"c":"char","id":"int","k":"int","pad":"char"},"data":[{"c":"38014276128-25250245652-62722561801-27818678124-24890218270-18312424692-92565570600-36243745486-21199862476-38576014630","id":"2","k":"2","pad":"23183251411-36241541236-31706421314-92007079971-60663066966"}],"old":null} {"id":0,"database":"jan","table":"","pkNames":null,"isDdl":true,"type":"QUERY","es":1652344966953,"ts":1652344969305,"sql":"CREATE DATABASE `jan`","sqlType":null,"mysqlType":null,"data":null,"old":null} {"id":0,"database":"jan","table":"sbtest1","pkNames":null,"isDdl":true,"type":"CREATE","es":1652344970604,"ts":1652344975305,"sql":"CREATE TABLE `sbtest1` (`id` INT NOT NULL AUTO_INCREMENT,`k` INT DEFAULT _UTF8MB4'0' NOT NULL,`c` CHAR(120) DEFAULT _UTF8MB4'' NOT NULL,`pad` CHAR(60) DEFAULT _UTF8MB4'' NOT NULL,PRIMARY KEY(`id`)) ENGINE = innodb","sqlType":null,"mysqlType":null,"data":null,"old":null} {"id":0,"database":"jan","table":"sbtest1","pkNames":null,"isDdl":true,"type":"CINDEX","es":1652344973455,"ts":1652344978504,"sql":"CREATE INDEX `k_1` ON `sbtest1` (`k`)","sqlType":null,"mysqlType":null,"data":null,"old":null}# 實(shí)驗(yàn)結(jié)束清理 172.16.6.155、172.16.6.196 兩個(gè) server 架起 kafka 環(huán)境 # 首先 ctrl + c 關(guān)閉所有終端啟動(dòng)的前臺(tái)進(jìn)程 [tidb@kafka1 ~]$ rm -rf /tmp/kafka-logs /tmp/zookeeper

4.3 同步至 MySQL

在 172.16.6.155:3306 本地裝個(gè) MySQL,指定相關(guān)參數(shù)后便可創(chuàng)建訂閱任務(wù),id 為 simple-replication-task,在 Grafana 監(jiān)控面板中可觀察到同步進(jìn)度。MySQL 對(duì)于 DBA 講一定是較為熟悉的工具,因此驗(yàn)證同步等步驟便不贅述。

[tidb@Linux-Hostname ~]$ tiup cdc cli changefeed create --pd=http://172.16.6.155:2379 \--sink-uri="mysql://jan:123123@172.16.6.155:3306/?time-zone=&worker-count=16&max-txn-row=5000" \--changefeed-id="simple-replication-task" \--sort-engine="unified" \--config=changefeed.toml tiup is checking updates for component cdc ... Starting component `cdc`: /home/tidb/.tiup/components/cdc/v6.0.0/cdc /home/tidb/.tiup/components/cdc/v6.0.0/cdc cli changefeed create --pd=http://172.16.6.155:2379 --sink-uri=mysql://jan:123123@172.16.6.155:3306/?time-zone=&worker-count=16&max-txn-row=5000 --changefeed-id=simple-replication-task --sort-engine=unified --config=changefeed.toml [2022/04/12 16:58:40.954 +08:00] [WARN] [mysql_params.go:143] ["max-txn-row too large"] [original=5000] [override=2048] Create changefeed successfully! ......

五、引用文章

1. 【PingCAP Infra Meetup】No.131 Why and how we build TiCDC

2. 【PingCAP Infra Meetup】No.131 TiCDC 的生態(tài)和社區(qū)建設(shè)

3. 官方文檔 -- TiCDC

4. 官方文檔 -- TiDB Binlog

5. 官方 FAQ -- Pump 的 gRPC message 超過限值

6. Github Design Doc -- TiCDC 支持的消息隊(duì)列輸出協(xié)議指南

7. Github Question and Bug Reports -- TiCDC 提升性能規(guī)劃路徑

8. AskTUG Blog -- 代曉磊 TiCDC 應(yīng)用場(chǎng)景解析

9. 官方文檔 -- Kafka

總結(jié)

以上是生活随笔為你收集整理的TiCDC系列分享-01-简述产生背景及使用概况的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。