Canal 介紹

canal 作用

canal是阿里巴巴旗下的一款開(kāi)源項(xiàng)目诬辈,純Java開(kāi)發(fā)∨肯纾基于數(shù)據(jù)庫(kù)增量日志解析对省,提供增量數(shù)據(jù)訂閱&消費(fèi),目前主要支持了MySQL(也支持mariaDB)晾捏。
canal 就是一個(gè)同步增量數(shù)據(jù)的一個(gè)工具蒿涎。

canal 背景

canal [k?'n?l],譯意為水道/管道/溝渠惦辛,主要用途是基于 MySQL 數(shù)據(jù)庫(kù)增量日志解析劳秋,提供增量數(shù)據(jù)訂閱和消費(fèi)

早期阿里巴巴因?yàn)楹贾莺兔绹?guó)雙機(jī)房部署,存在跨機(jī)房同步的業(yè)務(wù)需求裙品,實(shí)現(xiàn)方式主要是基于業(yè)務(wù) trigger 獲取增量變更俗批。從 2010 年開(kāi)始,業(yè)務(wù)逐步嘗試數(shù)據(jù)庫(kù)日志解析獲取增量變更進(jìn)行同步市怎,由此衍生出了大量的數(shù)據(jù)庫(kù)增量訂閱和消費(fèi)業(yè)務(wù)岁忘。

基于日志增量訂閱和消費(fèi)的業(yè)務(wù)包括

  • 數(shù)據(jù)庫(kù)鏡像
  • 數(shù)據(jù)庫(kù)實(shí)時(shí)備份
  • 索引構(gòu)建和實(shí)時(shí)維護(hù)(拆分異構(gòu)索引、倒排索引等)
  • 業(yè)務(wù) cache 刷新
  • 帶業(yè)務(wù)邏輯的增量數(shù)據(jù)處理
    當(dāng)前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x

來(lái)自阿里巴巴官方介紹

canal 應(yīng)用場(chǎng)景

流程圖
  1. 將用戶(hù)的訂單信息傳入后臺(tái)区匠。
  2. 后臺(tái)服務(wù)器將訂單信息保存到mysql數(shù)據(jù)庫(kù)干像。
  3. 又 canal 進(jìn)行監(jiān)控mysql中的寫(xiě)操作變化,將發(fā)生修改(Insert) 的數(shù)據(jù)寫(xiě)入到kafka
  4. 通過(guò)sparkStreaming讀取Kafka中的數(shù)據(jù)驰弄,進(jìn)行計(jì)算麻汰。
  5. 將計(jì)算好的結(jié)果,重新寫(xiě)如到服務(wù)器中戚篙,并返回到瀏覽器五鲫。

需求

根據(jù)需求,思考如何處理岔擂?

獲取用戶(hù)的訂單信息位喂,保存入庫(kù),并且進(jìn)行實(shí)時(shí)計(jì)算(A 商品成交單數(shù)乱灵,B商品成交單數(shù)...)塑崖。

為什么要使用canal?

通過(guò)需求了解到需要對(duì)訂單信息做計(jì)算,并且實(shí)時(shí)統(tǒng)計(jì)出每個(gè)商品的成交信息痛倚,如此時(shí)A 商品 100條规婆,B 商品 20條。這商品信息是動(dòng)態(tài)變化的,用戶(hù)每提交一次抒蚜,后臺(tái)就應(yīng)該計(jì)算出最新的商品訂單記錄掘鄙。所以需要實(shí)時(shí)進(jìn)行累加,比如又來(lái)一批商品嗡髓,其中 A商品 10條通铲,B 商品5條,C 商品10條器贩。那么展示的結(jié)果就是 A110條,B 30條朋截。C5條蛹稍。但是計(jì)算又不可能重頭開(kāi)始計(jì)算,也就是說(shuō)部服,A+B+C =145 中條數(shù)據(jù)中唆姐,再重新分A,B,C各個(gè)商品的信息。而是應(yīng)該做累加 比如上一次A商品100條再加上這次A商品的10條廓八。這樣的效率才更高奉芦。

canal的作用

了解上面的原因之后,我們?cè)賮?lái)聊聊canal發(fā)揮的作用剧蹂,它可以實(shí)現(xiàn)增量同步声功,還是拿A商品舉例,第一批數(shù)據(jù)中宠叼,A商品有100條先巴,canal便會(huì)將這批新增的數(shù)據(jù)寫(xiě)入Kafka,再交給spark處理冒冬。第二次又新增一批數(shù)據(jù)伸蚯,于是canal又將監(jiān)控到新增數(shù)據(jù)寫(xiě)入到Kafka中。依次類(lèi)推简烤,最終由spark計(jì)算出結(jié)果返回出去剂邮。

canal 除了寫(xiě)入kafka 還能將數(shù)據(jù)寫(xiě)入到其他中間件(mysql、elasticsearch横侦、hbase等)

工作圖


工作原理官網(wǎng)介紹

MySQL主備復(fù)制原理

image.png

  • MySQL master 將數(shù)據(jù)變更寫(xiě)入二進(jìn)制日志( binary log, 其中記錄叫做二進(jìn)制日志事件binary log events挥萌,可以通過(guò) show binlog events 進(jìn)行查看)
  • MySQL slave 將 master 的 binary log events 拷貝到它的中繼日志(relay log)
  • MySQL slave 重放 relay log 中事件,將數(shù)據(jù)變更反映它自己的數(shù)據(jù)

canal 工作原理

  • canal 模擬 MySQL slave 的交互協(xié)議丈咐,偽裝自己為 MySQL slave 瑞眼,向 MySQL master 發(fā)送 dump 協(xié)議
  • MySQL master 收到 dump 請(qǐng)求,開(kāi)始推送 binary log 給 slave (即 canal )
  • canal 解析 binary log 對(duì)象(原始為 byte 流)

BinaryLog

WAL:

  • hbase在做寫(xiě)操作時(shí)棵逊,先將寫(xiě)操作的命令記錄在WAL日志中伤疙,之后再將數(shù)據(jù)寫(xiě)入memstore,此舉是為了在regionSerever進(jìn)程異常退出重啟后,恢復(fù)數(shù)據(jù)徒像,這種機(jī)制就叫WAL黍特。
    WAL日志:將其稱(chēng)為寫(xiě)操作命令的備份
  • NameNode在運(yùn)行期間,會(huì)將客戶(hù)端實(shí)時(shí)產(chǎn)生的元數(shù)據(jù)記錄在edits文件中锯蛀,在namenode重啟的時(shí)候灭衷,將之前的fsimage文件和edits合并得到最新的元素?fù)?jù)。
    edtis:客戶(hù)端寫(xiě)操作命名的備份
  • mysql可以開(kāi)啟biglog日志記錄功能旁涤,開(kāi)啟后每次向mysql服務(wù)端發(fā)送寫(xiě)操作命令翔曲,會(huì)記錄在一種特殊的文件中,這個(gè)特殊的文件九稱(chēng)為biglog日志劈愚。
    biglog日志:客戶(hù)端寫(xiě)操作命名的備份瞳遍,其目的也是為了服務(wù)器異常退出,恢復(fù)數(shù)據(jù)菌羽!

RelayLog

從機(jī)(slave)是如何同步主機(jī)(master)數(shù)據(jù)的呢掠械?他會(huì)啟動(dòng)兩個(gè)線(xiàn)程(I/O thread、SQL thread)注祖,

  • I/O thread:復(fù)制讀取主機(jī)(master)寫(xiě)入到binary log新增的內(nèi)容猾蒂。并將內(nèi)容寫(xiě)入到中繼日志(relay log)中,用于臨時(shí)緩沖的作用是晨。
  • SQL thread:用于讀取中繼日志(relay log)的中數(shù)據(jù)肚菠,并執(zhí)行,這樣從機(jī)(slave)就有了和主機(jī)(master)一樣的操作了罩缴。

canal 工作原理(我個(gè)人的理解)

canal 就像是一名"間諜"案糙,它偽裝成了一個(gè)從機(jī)(slave),從主機(jī)(master)中騙取數(shù)據(jù)靴庆。拿到數(shù)據(jù)之后时捌,再對(duì)數(shù)據(jù)進(jìn)行解析,比如·只要新增的數(shù)據(jù)或者刪除或修改的數(shù)據(jù)炉抒,并將數(shù)據(jù)重新進(jìn)行包裝奢讨,將數(shù)據(jù)重新寫(xiě)入到第三方服務(wù)中(mysql、Kafka焰薄、es等)拿诸。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市塞茅,隨后出現(xiàn)的幾起案子亩码,更是在濱河造成了極大的恐慌,老刑警劉巖野瘦,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件描沟,死亡現(xiàn)場(chǎng)離奇詭異飒泻,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)吏廉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)泞遗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人席覆,你說(shuō)我怎么就攤上這事史辙。” “怎么了佩伤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵聊倔,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我生巡,道長(zhǎng)方库,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任障斋,我火速辦了婚禮,結(jié)果婚禮上徐鹤,老公的妹妹穿的比我還像新娘垃环。我一直安慰自己,他們只是感情好返敬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布遂庄。 她就那樣靜靜地躺著,像睡著了一般劲赠。 火紅的嫁衣襯著肌膚如雪涛目。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天凛澎,我揣著相機(jī)與錄音霹肝,去河邊找鬼。 笑死塑煎,一個(gè)胖子當(dāng)著我的面吹牛沫换,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播最铁,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼讯赏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了冷尉?” 一聲冷哼從身側(cè)響起漱挎,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雀哨,沒(méi)想到半個(gè)月后磕谅,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年怜庸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了当犯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡割疾,死狀恐怖嚎卫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宏榕,我是刑警寧澤拓诸,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站麻昼,受9級(jí)特大地震影響奠支,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抚芦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一倍谜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叉抡,春花似錦尔崔、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至消返,卻和暖如春载弄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撵颊。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工宇攻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人倡勇。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓尺碰,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親译隘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子亲桥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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