精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Binlog還能這樣用之Canal篇

開發 前端
我們想一想這個問題的本質是什么呢?就是需要保證我們的數據不論在redis還是在es都要和我們的mysql一致,本質上是數據的復制。一想到數據的復制,熟悉Mysql的朋友就會說到:Mysql的主備不也是數據復制嗎?如果我們模仿Mysql的主備復制,那我們數據同步那么就會很容易了。

[[341955]]

本文轉載自微信公眾號「咖啡拿鐵 」,作者咖啡拿鐵  。轉載本文請聯系咖啡拿鐵 公眾號。

 不知道是否你還在為下面的問題而困擾:

  • 當你使用了redis或者其他中間件做緩存的時候,經常發現緩存和數據庫的數據不一致,只能通過定時任務或者緩存過期的方式去做一些限制。
  • 當你使用了ES做搜索工具,使用雙寫的那一套方法,還在為ES和數據庫不是一個事務而擔憂。
  • 當你需要遷移數據的時候,也還在使用雙寫的方法,如果是同一個數據庫的還好,如果是不同數據庫就不能保證事務,那么數據一致性也是個問題,就會寫很多的修復Job和檢查Job。

這些問題相信在很多同學的業務當中應該都遇到過,也可能因為這些問題常常增加了很多的工作量或者導致一些數據不一致的故障。那么我們怎么才能比較簡單的解決這些問題呢?

我們想一想這個問題的本質是什么呢?就是需要保證我們的數據不論在redis還是在es都要和我們的mysql一致,本質上是數據的復制。一想到數據的復制,熟悉Mysql的朋友就會說到:Mysql的主備不也是數據復制嗎?如果我們模仿Mysql的主備復制,那我們數據同步那么就會很容易了。

Mysql主從

既然我們可以模仿Mysql的主從復制來完成我們的需求,那么我們需要先了解一下mysql主從的原理,如下圖所示:

  • Stpe 1: 作為master的mysql需要在每個事務更新數據完成之前,將該操作記錄串行地寫入到binlog文件中,存儲在本地磁盤中。
  • Step 2: 在我們的salve服務器中開啟一個I/O Thread,它會不斷的從binlog中讀取如果讀取。如果進度已經跟上了master,就進入睡眠狀態并等待master產生新的事件。所有讀取的數據都會寫到Relay log(中繼日志)中。
  • Step 3:SQL Thread會讀取中繼日志,并順序執行該日志中的SQL事件,從而與主數據庫中的數據保持一致。

在主從復制中過程中,其中最為重要的就是binlog,從庫會根據binlog的信息從而來復制出一份主庫的數據。

如果我們能在業務代碼中拿到binlog,通過binlog的數據,復制到redis或者es中,那我們就完全不用擔心數據的一致性的問題了。

binlog

binlog(Binary Log)顧名思義就是Mysql中二進制的日志,記錄了Mysql對數據庫執行更改的所有操作。binlog也是server層產生的日志和我們的存儲引擎沒有關系,不論你使用哪種存儲引擎,都可以使用我們的binlog。

binlog格式

在binlog中有三種格式,分別是:Statement,Row, Mixed三種,可以通過show variables like 'binlog_format'進行查看當前數據庫的binlog格式,如下圖所示就是一個Row格式的binlog:

Statement

Statement也就是語句類型,他會記錄每一條修改數據的Sql到binlog中。

?優點:空間占比是最小的,不會記錄沒有修改的字段。相比其他模式減少了很多的日志亮,提高I/O性能。

?缺點:異構系統不方便使用,比如redis緩存復制的時候,很難模擬mysql的從操作,需要數據重查一次。并且slave也會有問題,比如使用一些UUID函數,slave重放的時候并不能保證兩邊是一致的。我們可以查看下Statement的日志內容到底是什么?我們這里可以輸入命令:show master status;查看我們當前master正在使用的binlog,如下圖:

然后再使用命令show binlog events in 'mysql-bin.000003', 查看這個日志中的內容是什么:

我們可以發現我們所有的操作都會在一個完整的事務中進行,如果事務沒有提交是不會出現在我們的binlog當中的,這個大家可以下來進行實驗一下,我們在數據庫中的更新原始sql都會被完全的記錄下來。

Row

Row模式和Statement不同,他會記錄每一行被修改后的所有的數據:

  • 優點:異構系統也能比較方便的同步數據,并且不會出現UUID函數的那種問題,無論什么情況都能被復制。
  • 缺點:數據量比較多,比如update語句,他還會記錄更新前的每一個字段和更新后的每一個字段。造成日志量比較大,對I/O有一定的影響。

同樣的我們也查看一下其中的內容:

在show binlog events in 'mysql-bin.000004'命令中,我們發現在事務中是查看不了我們具體的數據的,這個時候就需要我們工具幫忙了mysqlbinlog,他也在mysql的bin目錄下我們直接調用就好了,輸入命令/usr/local/mysql/bin/mysqlbinlog --base64-output=decode-rows -v mysql-bin.000004,我們可以看見:

這里展示的是一個update語句,他不僅顯示了原始值,也展示了修改后的值。

這里要注意的是binlog_row_image用于決定row是否會記錄原始值,默認是FULL代表會記錄,也就是我們上面的這種情況,還有個參數是minimal,代表只記錄更新后的值。

Mixed

在mixed模式下,MySQL默認仍然采用statement格式進行記錄,但是一旦它判斷可能會有數據不一致的情況(UUID函數)發生,則會采用row格式來記錄。

我們目前默認使用的是Row模式,在Row模式下可以比較方便的將數據異構,其實Row模式對I/O影響在業務當中來說感知并不是特別明顯。

Canal

當我們知道binlog是什么之后,我們就需要怎么去使用這個binlog。binlog的同步工具常見的有:databus,canal,maxwell,阿里云dts等等,在這里我們就不比較他們各自的優劣點了,重點去介紹canal。

canal(github地址:https://github.com/alibaba/canal),譯意為水道/管道/溝渠,主要用途是基于 MySQL 數據庫增量日志解析,提供增量數據訂閱和消費

早期阿里巴巴因為杭州和美國雙機房部署,存在跨機房同步的業務需求,實現方式主要是基于業務 trigger 獲取增量變更。從 2010 年開始,業務逐步嘗試數據庫日志解析獲取增量變更進行同步,由此衍生出了大量的數據庫增量訂閱和消費業務。后面在阿里云中逐漸演化稱DTS項目。

canal大體原理也是模仿mysql的slave,從master上不斷的去拉取binlog,然后將binlog可以投放到不同的地方,比如我們常見的消息隊列:kafka,rocketmq等等。當然在阿里云的付費dts上面也是可以直接同步到redis,es或者其他的一些存儲介質當中。

canal的簡單使用可以查看quickStart:https://github.com/alibaba/canal/wiki/QuickStart ,這里不做過多的介紹。接下來主要是更多的介紹canal的整體架構,以及實現的原理等等。

Canal整體架構

CanalServer:一個Jvm就可以理解成一個CanalServer,如果是集群模式的Canal的話 那么就會有多個CanalServer。

CanalInstance: 可以理解為一個作業為一個Instance,比如有一個把A庫的binlog同步到A消息隊列,B庫的binlog同步到B的消息隊列,那么這就是兩個不同的Instance,至于哪個Instance在哪個CanalServer上跑,需要看誰先在ZK搶占到臨時節點,如果分配得足夠均勻得話,可以在集群模式下緩解很多壓力。

CanalParser: 用于拉取mysql-binlog,并進行解析。

EventSink: 將解析的數據進行處理加工(過濾,合并等)。

CanalEventStore: 這個有點類似slave中的relay log,用于將日志進行中繼存儲,但是在canal中目前只支持了在內存中存儲,目前不支持落盤存儲。

CanalParser,EventSink,CanalEventStore這三個都是屬于Canal中非常重要的組件,他們之間的關系如下:

CanalParser產生數據讓EventSink進行加工,加工后的數據會存儲在CanalEventStore中,然后MQ從CanalEventStore中不斷的拉取最新數據,然后投遞到MQ。

CanalParser

我們來講講在CanalParser中Canal是如何偽裝成slave去拉數據的,在AbstractEventParser.java這個類中有如下步驟:

  • Step1: 構建一個數據庫鏈接,并且生成一個slaveId,用于標示自己slave的身份。
  • Step2: 獲取數據庫的元信息,比如binlogFormat,binRowImage等等。
  • Step3: 通過show variables like 'server_id' 命令,獲取我們需要監聽binlog服務的serverId。

Step4: 獲取這一次需要消費的位置,如果有存儲上一次的就從上一次中獲取,如果沒有的話需要通過show master status命令中獲取到的最新的Position進行消費。

Step5: 進行dump操作,模擬slave發送注冊slave請求,以及dump binlog請求,然后用一個死循環不斷的從binlog中拉取數據:

Step6: 將獲取到的二進制數據,根據mysql binlog協議轉換成logEntry,方便后續處理。

EventSink

EventSink會將上面獲取到的logEntry來進行加工:

  • 過濾:
  • 過濾空的事務
  • 過濾心跳
  • 自定義過濾

記錄,這里使用了Prometheus,來進行數據的統計上報。

合并,現在有很多分庫分表的業務需要,他們的數據來源都是從不同的Parser中來的,但是最后都需要匯總到同一個EventStore中。在這個場景需要注意的我們可以需要注意的是會做時間歸并控制,也就是盡量讓每個分庫的數據匯總后都是遞增的方式提交,避免出現某個分庫的數據比其他的領先或者落后很多。

EventStore

我們先看看EventStore中提供的接口:

可以看見EventStore其實就是一個簡單的存儲,在canal中提供了MemoryEventStoreWithBuffer,在內存中進行中轉的數據,其中的原理是通過RingBuffer(無鎖,高性能隊列)實現的,有關于RingBuffer的信息可以參考我之前的文章你應該知道的Disruptor,在3.1中有對RingBuffer進行詳細講解。

然后CanalMq通過EventStore不斷的獲取數據,來進行數據發送。

小結

在Canal里面其實還有一些其他的優化,比如對于修改表結構之后的優化,gtid的一些優化等等,大家有興趣的可以下來自行閱讀,這里就不擴展講開了。

總結

這篇文章主要給大家講了binlog的一些知識以及Canal的一些科普,希望大家以后在做一些異構系統數據的同步的時候,可以多多使用binlog,用更簡單的技術,做更可靠的事。

 

責任編輯:武曉燕 來源: 咖啡拿鐵
相關推薦

2020-11-16 13:38:31

PostMessage

2021-10-29 07:49:22

Spring事務管理

2021-09-05 07:55:37

前端Emoji 表情

2021-07-28 06:10:47

拖拽設計器 transmat

2012-07-13 11:32:16

網絡出口

2024-08-02 08:38:20

Controller接口地址

2024-05-13 00:47:37

JSON對象數據

2010-06-04 10:01:26

Hadoop安裝

2024-07-10 11:26:18

2022-04-11 08:20:36

編程輔助工具GitHubCopilot

2024-12-03 09:45:34

2018-12-12 11:30:54

JavaString字符串

2024-01-30 09:21:29

CSS文字效果文字裝飾

2022-08-12 08:25:33

Python異常信息代碼

2021-04-09 08:23:30

Css前端加載動畫

2019-12-05 10:08:39

Python 開發編程語言

2020-12-30 09:45:50

MySQL數據分離數據庫

2025-10-10 09:11:33

2025-07-14 01:30:00

2023-02-26 00:00:02

字符串分割String
點贊
收藏

51CTO技術棧公眾號

国产一区二区三区蝌蚪| 蜜臀91精品国产高清在线观看| 中文字幕日本乱码精品影院| 99国产超薄肉色丝袜交足的后果| 日本在线视频免费观看| 欧美亚洲国产精品久久| 日韩免费观看高清完整版在线观看| 成人午夜视频在线观看免费| 3d成人动漫在线| 国产白丝网站精品污在线入口| 日韩免费av片在线观看| 欧美三级 欧美一级| 亚洲精品国产动漫| 欧美一区二区免费观在线| 国产日韩一区二区在线| 91精品久久久久久粉嫩| 久久亚洲二区三区| av一区二区三区四区电影| 91丨九色丨海角社区| 伊人久久大香线蕉av超碰演员| 在线视频亚洲欧美| 人妻av一区二区| 欧美成人高清视频在线观看| 欧美日韩国产精品| 国产又粗又大又爽的视频| 精品美女视频在线观看免费软件 | 国产成人在线一区二区| 麻豆成人在线视频| 三区四区不卡| 亚洲欧美另类自拍| 欧美肉大捧一进一出免费视频| 91嫩草国产线观看亚洲一区二区| 日韩欧美福利视频| www.日本少妇| 在线观看电影av| 中文字幕在线观看不卡视频| 日韩欧美亚洲日产国| 日韩黄色影片| 波多野结衣中文字幕一区 | 亚洲国产精品久久久久久6q| 久久电影国产免费久久电影| 国产精品手机播放| 伊人久久久久久久久久久久| 国产亚洲永久域名| 国外成人免费在线播放| 欧美日韩激情在线观看| 婷婷成人基地| 久久久精品国产| 久草手机视频在线观看| 久久人人99| 中文字幕在线精品| 欧美性受xxxx黑人| 欧美久久综合网| 国产一区二区三区在线视频| 日本一级免费视频| 国产99久久| 伊人成人开心激情综合网| 亚洲一区二区三区日韩| 成人羞羞网站| 色偷偷91综合久久噜噜| 欧美美女性生活视频| 欧美电影《轻佻寡妇》| 久久精品视频中文字幕| 国产美女久久久久久| 91精品啪在线观看国产81旧版| 久久精品成人动漫| 农村妇女精品一区二区| 韩日欧美一区| 亚洲**2019国产| 在线观看黄网站| 视频在线观看一区| 国产欧美一区二区三区视频| 99久久精品日本一区二区免费| 老司机精品视频在线| 91系列在线播放| www.欧美国产| 99精品视频在线免费观看| 久久亚洲一区二区| 永久av在线| 夜夜揉揉日日人人青青一国产精品 | 天天爽夜夜爽一区二区三区 | 成人9ⅰ免费影视网站| 人妻视频一区二区三区| 久久婷婷成人综合色| 一本一道久久久a久久久精品91 | 一级做a爱视频| 黄色成人美女网站| 在线播放精品一区二区三区 | 在线视频 日韩| 精品freesex老太交| 另类视频在线观看| 在线观看亚洲欧美| 国产在线一区观看| 九九九九九九精品| 蜜桃视频在线观看www社区| 亚洲一线二线三线视频| 男人舔女人下面高潮视频| **日韩最新| 亚洲欧洲在线看| 欧美国产在线看| 日韩精品电影一区亚洲| 99re在线播放| 国产黄色片在线观看| 一区二区三区日韩欧美精品| 久久精品视频91| 999国产精品一区| www国产91| 亚洲久久在线观看| 国产乱色国产精品免费视频| 日本一区二区精品| 福利成人导航| 欧美日韩亚洲不卡| 国产精品无码网站| 欧美在线亚洲综合一区| 国产精品电影网站| 天天操天天干天天爽| 综合久久久久久久| 欧美一级裸体视频| 日韩大片在线免费观看| 欧美精品在线观看| 亚洲性生活大片| 久久只精品国产| 1pondo在线播放免费| 日韩中文首页| 97在线免费视频| 国产女主播福利| 欧美国产日韩亚洲一区| 九九爱精品视频| 美国十次综合久久| 欲色天天网综合久久| 亚洲一区欧美在线| 国产精品一区二区久久不卡| 亚洲ai欧洲av| 吉吉日韩欧美| 日韩av在线网站| 久久国产一级片| 国产在线不卡一区| 亚洲欧美日韩精品综合在线观看| 成人直播视频| 亚洲国产精品福利| 精品处破女学生| 国产精品原创巨作av| 在线视频不卡国产| 草莓视频成人appios| 国产亚洲精品美女| av片免费观看| 国产亚洲精品bt天堂精选| www.com毛片| 日本成人7777| 日韩女优人人人人射在线视频| 三级在线播放| 一本在线高清不卡dvd| 国产精品九九九九九| 亚洲一区成人| 久久婷婷人人澡人人喊人人爽| 182在线视频观看| 亚洲第一页在线| 日本熟伦人妇xxxx| www.亚洲免费av| 日韩精品一区在线视频| 精品视频高潮| 日本老师69xxx| 韩国三级在线观看久| 91国产免费观看| 2019男人天堂| 精品一区二区免费在线观看| 自拍偷拍亚洲色图欧美| 亚洲一区有码| 九九久久精品一区| 欧洲av在线播放| 欧美日韩国产丝袜美女| 91成人破解版| 激情五月婷婷综合| www国产无套内射com| 国产人妖ts一区二区| 日本精品中文字幕| 在线视频91p| 精品久久久久久久久久久久久久久 | 在线播放精品视频| 中文字幕中文字幕一区| 国产免费无码一区二区| 9色精品在线| 亚洲欧洲日韩精品| 亚洲网址在线观看| 国产成人精品视频| 国产一二区在线| 亚洲精品成人久久电影| 中文字字幕在线中文乱码| 亚洲激情五月婷婷| 亚洲精品成人无码熟妇在线| 精品一二三四区| 黄色成人在线看| 精品一区二区三区在线| 超碰97网站| 国外成人福利视频| 欧美激情欧美狂野欧美精品 | 久久久久久亚洲精品美女| 午夜精品久久久久久99热| 日夜干在线视频| 91精品欧美久久久久久动漫| 国产又色又爽又黄的| 国产精品麻豆视频| 国产黄色三级网站| 久久99热国产| 50路60路老熟妇啪啪| 欧美日韩免费| 亚洲一区二区在线观| 噜噜噜天天躁狠狠躁夜夜精品| 国产日韩精品入口| 美女福利一区二区| 久久久人成影片一区二区三区观看 | 99麻豆久久久国产精品免费| 污污视频网站在线| 久久精品亚洲| 精品久久久久久久久久中文字幕| 香蕉av一区二区| 日韩高清av电影| 欧美大奶一区二区| 成人免费看片网址| av国产精品| 国产日韩精品电影| 日韩毛片在线| 日韩暖暖在线视频| 欧美激情护士| 久久免费精品视频| 50度灰在线| 久久精品欧美视频| 日韩免费啪啪| 在线精品国产成人综合| 免费福利在线观看| 日韩成人激情视频| 亚洲欧美激情另类| 日韩美女一区二区三区| 99精品免费观看| 在线播放一区二区三区| 在线视频免费观看一区| 在线观看欧美精品| 久久永久免费视频| 91久久精品网| 亚洲av无码不卡| 欧美伊人久久久久久久久影院| 国产精品久免费的黄网站| 亚洲成人av电影| 中文字幕亚洲精品在线| 精品动漫一区二区| 国产毛片aaa| 色综合久久中文字幕| 国产精品一区无码| 日本福利一区二区| 黄色大全在线观看| 欧美精品一二三区| 国产美女免费视频| 欧美电影免费提供在线观看| 丰满人妻妇伦又伦精品国产| 亚洲国产另类 国产精品国产免费| 欧洲精品久久一区二区| 精品无码久久久久久国产| 暖暖视频在线免费观看| 伊人伊成久久人综合网小说 | 性视频1819p久久| 一区一区三区| 国产精品午夜一区二区欲梦| 亚洲精品伦理| 亚洲自拍偷拍第一页| 91精品国产自产在线丝袜啪| 久99久在线| 欧美日韩国产高清电影| ijzzijzzij亚洲大全| 欧美日韩精品| 欧在线一二三四区| 老司机一区二区| 95视频在线观看| 久久久久久久网| 精品亚洲乱码一区二区| 亚洲国产欧美另类丝袜| 亚洲精品久久久久久久蜜桃| 欧美顶级少妇做爰| 欧美性猛交 xxxx| 亚洲欧美精品中文字幕在线| 黄网站在线免费| 91精品国产91| 青青草国产一区二区三区| www.久久草| 国模精品一区| 美国av在线播放| 国产精品一卡| 日韩va在线观看| 95精品视频在线| 免费一级suv好看的国产网站| 一区二区三区在线免费| 伊人中文字幕在线观看| 欧美一级片在线观看| 蜜桃视频在线免费| 美女精品久久久| 97久久香蕉国产线看观看| 亚洲专区国产精品| 欧美日韩黑人| 国产精品成人久久电影| 精品在线一区二区三区| jizz欧美性20| 亚洲品质自拍视频| 亚洲精品国产无码| 精品1区2区在线观看| 在线看免费av| 国产成人精品午夜| 北条麻妃在线一区二区免费播放| 水蜜桃亚洲一二三四在线| 午夜性色一区二区三区免费视频 | 超碰这里只有精品| 精品国产综合| 欧美三级乱码| 91av视频免费观看| 久久精品无码一区二区三区| 豆国产97在线 | 亚洲| 欧美精品一二三四| 福利在线午夜| 日产精品久久久一区二区福利| 粉嫩av一区二区| 日本一区二区三区四区五区六区| 日本vs亚洲vs韩国一区三区二区| 欧美一区二区免费在线观看| 亚洲精选免费视频| 亚洲在线视频播放| 亚洲四色影视在线观看| 欧美激情护士| 精品毛片久久久久久| 精品二区久久| 2018国产精品| 亚洲蜜臀av乱码久久精品蜜桃| 中文区中文字幕免费看| 亚洲视频网站在线观看| 色在线中文字幕| 另类欧美小说| 国产模特精品视频久久久久| 韩国三级hd两男一女| 亚洲成av人片在www色猫咪| 99在线观看免费| 欧美xxxx18国产| 国产亚洲精aa在线看| 久久久久亚洲av无码专区喷水| 久久精品国产免费| 国产又粗又猛又爽又黄的视频小说| 色婷婷久久久综合中文字幕| 久久久久国产精品嫩草影院| 欧美一区三区三区高中清蜜桃| 日韩成人一级| 国产激情在线观看视频| 国产欧美日韩不卡免费| www.久久视频| 北条麻妃一区二区三区中文字幕| 欧美少妇激情| 蜜臀在线免费观看| 国产精品1区二区.| 久久无码精品丰满人妻| 欧美精品一区二区三区很污很色的| 91桃色在线观看| 玛丽玛丽电影原版免费观看1977| 媚黑女一区二区| gv天堂gv无码男同在线观看 | 手机在线精品视频| 欧美在线视频播放| 精品美女视频| 欧美成人三级在线播放| 中文字幕中文字幕一区| 亚洲成熟女性毛茸茸| 91精品国产91久久久久久最新 | 免费在线看黄色片| 99久久免费精品| 天天干天天插天天射| 精品国产一区二区三区久久狼黑人 | 亚洲av毛片基地| 欧美一区二区视频网站| 91老司机福利在线| 日韩国产一区久久| 国产专区欧美精品| 五月婷婷中文字幕| 日韩在线免费观看视频| jizz国产精品| 91av俱乐部| 一区二区三区不卡视频在线观看| 天堂中文在线看| 成人黄色av免费在线观看| 午夜精品久久| av永久免费观看| 精品久久久久久亚洲综合网| 小黄鸭精品aⅴ导航网站入口| 国产又黄又爽免费视频| 99精品视频一区| 国产一区二区在线不卡| 97超级碰碰碰| 日韩一区二区在线免费| 99精品一区二区三区无码吞精| 欧美在线不卡一区| 欧美黄色视屏| 亚洲资源视频| 97aⅴ精品视频一二三区| 国产日韩免费视频| 国产成人亚洲综合91精品| 国产精品va| 国产免费一区二区三区四区|