數(shù)據(jù)實(shí)時(shí)增量同步之CDC工具—Canal挽霉、mysql_stream、go-mysql-transfer变汪、Maxwell

@TOC

[Mysql數(shù)據(jù)實(shí)時(shí)增量同步之CDC工具—Canal侠坎、mysql_stream、go-mysql-transfer裙盾、Maxwell:https://blog.csdn.net/weixin_42526326/article/details/121148721

什么是CDC实胸?

CDC(Change Data Capture)是變更數(shù)據(jù)獲取的簡稱他嫡。可以基于增量日志庐完,以極低的侵入性來完成增量數(shù)據(jù)捕獲的工作钢属。核心思想是,監(jiān)測并捕獲數(shù)據(jù)庫的變動(dòng)(包括數(shù)據(jù)或數(shù)據(jù)表的插入门躯、更新以及刪除等)淆党,將這些變更按發(fā)生的順序完整記錄下來,寫入到消息中間件中以供其他服務(wù)進(jìn)行訂閱及消費(fèi)讶凉。

簡單來講:CDC是指從源數(shù)據(jù)庫捕獲到數(shù)據(jù)和數(shù)據(jù)結(jié)構(gòu)(也稱為模式)的增量變更宁否,近乎實(shí)時(shí)地將這些變更,傳播到其他數(shù)據(jù)庫或應(yīng)用程序之處缀遍。
通過這種方式慕匠,CDC能夠向數(shù)據(jù)倉庫提供高效、低延遲的數(shù)據(jù)傳輸域醇,以便信息被及時(shí)轉(zhuǎn)換并交付給專供分析的應(yīng)用程序台谊。

與批量復(fù)制相比,變更數(shù)據(jù)的捕獲通常具有如下三項(xiàng)基本優(yōu)勢:

  • CDC通過僅發(fā)送增量的變更譬挚,來降低通過網(wǎng)絡(luò)傳輸數(shù)據(jù)的成本锅铅。
  • CDC可以幫助用戶根據(jù)最新的數(shù)據(jù)做出更快、更準(zhǔn)確的決策减宣。例如盐须,CDC會(huì)將事務(wù)直接傳輸?shù)綄9┓治龅膽?yīng)用上。
  • CDC最大限度地減少了對(duì)于生產(chǎn)環(huán)境網(wǎng)絡(luò)流量的干擾漆腌。

CDC工具對(duì)比

特色 Canal mysql_stream go-mysql-transfer Maxwell
開發(fā)語言 Java Python Golang Java
高可用 支持 支持 支持 支持
接收端 編碼定制 Kafka等(MQ) Redis贼邓、MongoDB、Elasticsearch闷尿、RabbitMQ塑径、Kafka、RocketMQ填具、HTTP API 等 Kafka统舀,Kinesis、RabbitMQ劳景、Redis誉简、Google Cloud Pub/Sub、文件等
全量數(shù)據(jù)初始化 不支持 支持 支持 支持
數(shù)據(jù)格式 編碼定制 Json(固定格式) Json(規(guī)則配置) 模板語法 Lua腳本 JSON
性能(4-8TPS)

實(shí)現(xiàn)原理:

1盟广、go-mysql-transfer將自己偽裝成MySQL的Slave闷串,

2、向Master發(fā)送dump協(xié)議獲取binlog衡蚂,解析binlog并生成消息

3窿克、將生成的消息實(shí)時(shí)骏庸、批量發(fā)送給接收端

img

Mysql binlog 講解:

MySQL的二進(jìn)制日志可以說MySQL最重要的日志了,它記錄了所有的DDL和DML(除了數(shù)據(jù)查詢語句)語句年叮,
以事件形式記錄具被,還包含語句所執(zhí)行的消耗的時(shí)間,MySQL的二進(jìn)制日志是事務(wù)安全型的只损。

一般來說開啟二進(jìn)制日志大概會(huì)有1%的性能損耗一姿。

二進(jìn)制日志兩個(gè)最重要的使用場景:

  • MySQL Replication在Master端開啟binlog,Master把它的二進(jìn)制日志傳遞給slaves來達(dá)到master-slave數(shù)據(jù)一致的目的跃惫。
  • 數(shù)據(jù)恢復(fù)叮叹,通過使用mysqlbinlog工具來使恢復(fù)數(shù)據(jù)。

二進(jìn)制日志包括兩類文件:

  • 二進(jìn)制日志索引文件(文件名后綴為.index)用于記錄所有的二進(jìn)制文件

  • 二進(jìn)制日志文件(文件名后綴為.00000*)記錄數(shù)據(jù)庫所有的DDL和DML(除了數(shù)據(jù)查詢語句)語句事件爆存。

binlog文件的滾動(dòng):

  • 達(dá)到了滾動(dòng)的大小
  • mysql服務(wù)停止

mysql binlog的三種格式

在配置文件中可以選擇配置 binlog_format= statement|mixed|row

  • ROW 模式(一般就用它)

    日志會(huì)記錄每一行數(shù)據(jù)被修改的形式蛉顽,不會(huì)記錄執(zhí)行 SQL 語句的上下文相關(guān)信息,只記錄要修改的數(shù)據(jù)先较,哪條數(shù)據(jù)被修改了携冤,修改成了什么樣子,只有 value闲勺,不會(huì)有 SQL 多表關(guān)聯(lián)的情況曾棕。

    優(yōu)點(diǎn):它僅僅只需要記錄哪條數(shù)據(jù)被修改了,修改成什么樣子了菜循,所以它的日志內(nèi)容會(huì)非常清楚地記錄下每一行數(shù)據(jù)修改的細(xì)節(jié)翘地,非常容易理解。

    缺點(diǎn):ROW 模式下癌幕,特別是數(shù)據(jù)添加的情況下衙耕,所有執(zhí)行的語句都會(huì)記錄到日志中,都將以每行記錄的修改來記錄序芦,這樣會(huì)產(chǎn)生大量的日志內(nèi)容臭杰。

  • STATEMENT 模式

    每條會(huì)修改數(shù)據(jù)的 SQL 語句都會(huì)被記錄下來粤咪。

    缺點(diǎn):由于它是記錄的執(zhí)行語句谚中,所以,為了讓這些語句在 slave 端也能正確執(zhí)行寥枝,那他還必須記錄每條語句在執(zhí)行過程中的一些相關(guān)信息宪塔,也就是上下文信息,以保證所有語句在 slave 端被執(zhí)行的時(shí)候能夠得到和在 master 端執(zhí)行時(shí)候相同的結(jié)果囊拜。

    但目前例如 step()函數(shù)在有些版本中就不能被正確復(fù)制某筐,在存儲(chǔ)過程中使用了 last-insert-id()函數(shù),可能會(huì)使 slave 和 master 上得到不一致的 id冠跷,就是會(huì)出現(xiàn)數(shù)據(jù)不一致的情況南誊,ROW 模式下就沒有身诺。

  • MIXED 模式

    以上兩種模式都使用。

常見的數(shù)據(jù)采集工具(相關(guān)知識(shí)):

DataX抄囚、Flume霉赡、Canal、Sqoop幔托、LogStash

DataX (處理離線數(shù)據(jù))

DataX 是阿里巴巴開源的一個(gè)異構(gòu)數(shù)據(jù)源離線同步工具穴亏,異構(gòu)數(shù)據(jù)源離線同步指的是將源端數(shù)據(jù)同步到目的端,但是端與端的數(shù)據(jù)源類型種類繁多重挑,在沒有 DataX 之前嗓化,端與端的鏈路將組成一個(gè)復(fù)雜的網(wǎng)狀結(jié)構(gòu),非常零散無法把同步核心邏輯抽象出來谬哀。

為了解決異構(gòu)數(shù)據(jù)源同步問題刺覆,DataX 將復(fù)雜的網(wǎng)狀的同步鏈路變成了星型數(shù)據(jù)鏈路,DataX 作為中間傳輸載體負(fù)責(zé)連接各種數(shù)據(jù)源史煎。

所以隅津,當(dāng)需要接入一個(gè)新的數(shù)據(jù)源的時(shí)候,只需要將此數(shù)據(jù)源對(duì)接到 DataX劲室,就可以跟已有的數(shù)據(jù)源做到無縫數(shù)據(jù)同步伦仍。

DataX本身作為離線數(shù)據(jù)同步框架,采用Framework+plugin架構(gòu)構(gòu)建很洋。將數(shù)據(jù)源讀取和寫入抽象成為Reader/Writer插件充蓝,納入到整個(gè)同步框架中。

  1. Reader: 它為數(shù)據(jù)采集模塊喉磁,負(fù)責(zé)采集數(shù)據(jù)源的數(shù)據(jù)谓苟,將數(shù)據(jù)發(fā)送給Framework。
  2. Writer: 它為數(shù)據(jù)寫入模塊协怒,負(fù)責(zé)不斷向Framework取數(shù)據(jù)涝焙,并將數(shù)據(jù)寫入到目的端。
  3. Framework:它用于連接Reader和Writer孕暇,作為兩者的數(shù)據(jù)傳輸通道仑撞,并處理緩沖、并發(fā)妖滔、數(shù)據(jù)轉(zhuǎn)換等問題隧哮。

核心模塊介紹:

  1. DataX完成單個(gè)數(shù)據(jù)同步的作業(yè),我們把它稱之為Job座舍,DataX接收到一個(gè)Job之后沮翔,將啟動(dòng)一個(gè)進(jìn)程來完成整個(gè)作業(yè)同步過程。
  2. DataX Job啟動(dòng)后曲秉,會(huì)根據(jù)不同的源端切分策略采蚀,將Job切分成多個(gè)小的Task(子任務(wù))疲牵,以便于并發(fā)執(zhí)行。
  3. 切分多個(gè)Task之后榆鼠,DataX Job會(huì)調(diào)用Scheduler模塊瑰步,根據(jù)配置的并發(fā)數(shù)據(jù)量,將拆分成的Task重新組合璧眠,組裝成TaskGroup(任務(wù)組)缩焦。每一個(gè)TaskGroup負(fù)責(zé)以一定的并發(fā)運(yùn)行完畢分配好的所有Task,默認(rèn)單個(gè)任務(wù)組的并發(fā)數(shù)量為5责静。
  4. 每一個(gè)Task都由TaskGroup負(fù)責(zé)啟動(dòng)袁滥,Task啟動(dòng)后,會(huì)固定啟動(dòng)Reader->Channel->Writer的線程來完成任務(wù)同步工作灾螃。
  5. DataX作業(yè)運(yùn)行完成之后题翻,Job監(jiān)控并等待多個(gè)TaskGroup模塊任務(wù)完成,等待所有TaskGroup任務(wù)完成后Job成功退出腰鬼。否則嵌赠,異常退出。

Flume(處理實(shí)時(shí)數(shù)據(jù))

Flume主要應(yīng)用的場景是同步日志數(shù)據(jù)熄赡,主要包含三個(gè)組件:Source姜挺、Channel、Sink彼硫。

Flume最大的優(yōu)點(diǎn)就是官網(wǎng)提供了豐富的Source炊豪、Channel、Sink拧篮,根據(jù)不同的業(yè)務(wù)需求词渤,我們可以在官網(wǎng)查找相關(guān)配置。另外串绩,F(xiàn)lume還提供了自定義這些組件的接口缺虐。

Logstash(處理離線數(shù)據(jù))

Logstash就是一根具備實(shí)時(shí)數(shù)據(jù)傳輸能力的管道,負(fù)責(zé)將數(shù)據(jù)信息從管道的輸入端傳輸?shù)焦艿赖妮敵龆私阜玻慌c此同時(shí)這根管道還可以讓你根據(jù)自己的需求在中間加上過濾網(wǎng)高氮,Logstash提供了很多功能強(qiáng)大的過濾網(wǎng)來滿足各種應(yīng)用場景。

Logstash是由JRuby編寫把篓,使用基于消息的簡單架構(gòu)纫溃,在JVM上運(yùn)行。在管道內(nèi)的數(shù)據(jù)流稱之為event韧掩,它分為inputs階段、filters階段窖铡、outputs階段疗锐。

Sqoop(處理離線數(shù)據(jù))

Sqoop是Hadoop和關(guān)系型數(shù)據(jù)庫之間傳送數(shù)據(jù)的一種工具坊谁,它是用來從關(guān)系型數(shù)據(jù)庫如MySQL到Hadoop的HDFS從Hadoop文件系統(tǒng)導(dǎo)出數(shù)據(jù)到關(guān)系型數(shù)據(jù)庫。Sqoop底層用的還是MapReducer滑臊,用的時(shí)候一定要注意數(shù)據(jù)傾斜口芍。

注:sqoop不是CDC工具 sqoop是基于查詢的全量數(shù)據(jù)捕獲.

參考:

https://www.cnblogs.com/zzz01/p/15263071.html

go-mysql-transfer產(chǎn)品手冊(cè)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市雇卷,隨后出現(xiàn)的幾起案子鬓椭,更是在濱河造成了極大的恐慌,老刑警劉巖关划,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件小染,死亡現(xiàn)場離奇詭異,居然都是意外死亡贮折,警方通過查閱死者的電腦和手機(jī)裤翩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來调榄,“玉大人踊赠,你說我怎么就攤上這事∶壳欤” “怎么了筐带?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長缤灵。 經(jīng)常有香客問我烫堤,道長,這世上最難降的妖魔是什么凤价? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任鸽斟,我火速辦了婚禮,結(jié)果婚禮上利诺,老公的妹妹穿的比我還像新娘富蓄。我一直安慰自己,他們只是感情好慢逾,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布立倍。 她就那樣靜靜地躺著,像睡著了一般侣滩。 火紅的嫁衣襯著肌膚如雪口注。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天君珠,我揣著相機(jī)與錄音寝志,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛材部,可吹牛的內(nèi)容都是我干的毫缆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼乐导,長吁一口氣:“原來是場噩夢啊……” “哼苦丁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起物臂,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤旺拉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后棵磷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛾狗,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年泽本,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了淘太。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡规丽,死狀恐怖蒲牧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赌莺,我是刑警寧澤冰抢,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站艘狭,受9級(jí)特大地震影響挎扰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜巢音,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一遵倦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧官撼,春花似錦梧躺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至秃诵,卻和暖如春续搀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背菠净。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工禁舷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留彪杉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓榛了,卻偏偏與公主長得像在讶,于是被迫代替她去往敵國和親煞抬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子霜大,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容