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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

CanalSharp-mysql数据库binlog的增量订阅消费组件Canal的.NET客户端

發(fā)布時間:2023/12/4 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CanalSharp-mysql数据库binlog的增量订阅消费组件Canal的.NET客户端 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一.前言

CanalSharp是阿里巴巴開源項目mysql數(shù)據(jù)庫binlog的增量訂閱&消費組件?Canal?的.NET客戶端,關于什么是 Canal?又能做什么?我會在后文為大家一一介紹。CanalSharp 這個項目,是由我和?WithLin(主要貢獻) 完成,并將一直進行維護的Canal的.NET客戶端項目。目前開源在github:https://github.com/CanalSharp/CanalSharp/?希望大家多多支持,旨在為.NET開發(fā)者提供一個友好的對接Canal的選擇,為.NET社區(qū)生態(tài)做貢獻。

二.Canal介紹

1.背景

早期,阿里巴巴B2B公司因為存在杭州和美國雙機房部署,存在跨機房同步的業(yè)務需求。不過早期的數(shù)據(jù)庫同步業(yè)務,主要是基于trigger的方式獲取增量變更,不過從2010年開始,阿里系公司開始逐步的嘗試基于數(shù)據(jù)庫的日志解析,獲取增量變更進行同步,由此衍生出了增量訂閱&消費的業(yè)務,從此開啟了一段新紀元。

ps. 目前內(nèi)部版本已經(jīng)支持mysql和oracle部分版本的日志解析,當前的canal開源版本支持5.7及以下的版本(阿里內(nèi)部mysql 5.7.13, 5.6.10, mysql 5.5.18和5.1.40/48)

基于日志增量訂閱&消費支持的業(yè)務:

  • 數(shù)據(jù)庫鏡像

  • 數(shù)據(jù)庫實時備份

  • 多級索引 (賣家和買家各自分庫索引)

  • search build

  • 業(yè)務cache刷新

  • 價格變化等重要業(yè)務消息

  • 2.工作原理

    2.1 mysql主備復制實現(xiàn)

    從上層來看,復制分成三步:

  • master將改變記錄到二進制日志(binary log)中(這些記錄叫做二進制日志事件,binary log events,可以通過show binlog events進行查看);

  • slave將master的binary log events拷貝到它的中繼日志(relay log);

  • slave重做中繼日志中的事件,將改變反映它自己的數(shù)據(jù)。

  • 2.2 Canal的工作原理

    原理相對比較簡單:

  • canal模擬mysql slave的交互協(xié)議,偽裝自己為mysql slave,向mysql master發(fā)送dump協(xié)議

  • mysql master收到dump請求,開始推送binary log給slave(也就是canal)

  • canal解析binary log對象(原始為byte流)

  • 以上內(nèi)容摘自Canal項目官方資料?https://github.com/alibaba/canal

    3.Canal的安裝以及使用

    Canal的安裝以及使用請查閱官方文檔,本文不在贅述。?https://github.com/alibaba/canal/wiki

    三.CanalSharp介紹

    1.工作原理

    CanalSharp 是 Canal 的 .NET 客戶端,它與 Canal 是采用的Socket來進行通信的,傳輸協(xié)議是TCP,交互協(xié)議采用的是 Google Protocol Buffer 3.0。

    2.工作流程

    1.Canal連接到mysql數(shù)據(jù)庫,模擬slave

    2.CanalSharp與Canal建立連接

    2.數(shù)據(jù)庫發(fā)生變更寫入到binlog

    5.Canal向數(shù)據(jù)庫發(fā)送dump請求,獲取binlog并解析

    4.CanalSharp向Canal請求數(shù)據(jù)庫變更

    4.Canal發(fā)送解析后的數(shù)據(jù)給CanalSharp

    5.CanalSharp收到數(shù)據(jù),消費成功,發(fā)送回執(zhí)。(可選)

    6.Canal記錄消費位置。

    以一張圖來表示:

    3.應用場景

    CanalSharp作為Canal的客戶端,其應用場景就是Canal的應用場景。關于應用場景在Canal介紹一節(jié)已有概述。這里我舉一些實際的使用例子:

    1.代替使用輪詢數(shù)據(jù)庫方式來監(jiān)控數(shù)據(jù)庫變更,有效改善輪詢耗費數(shù)據(jù)庫資源。

    2.根據(jù)數(shù)據(jù)庫的變更實時更新搜索引擎,比如電商場景下商品信息發(fā)生變更,實時同步到商品搜索引擎 Elasticsearch、solr等

    3.根據(jù)數(shù)據(jù)庫的變更實時更新緩存,比如電商場景下商品價格、庫存發(fā)生變更實時同步到redis

    4.數(shù)據(jù)庫異地備份、數(shù)據(jù)同步

    5.根據(jù)數(shù)據(jù)庫變更觸發(fā)某種業(yè)務,比如電商場景下,創(chuàng)建訂單超過xx時間未支付被自動取消,我們獲取到這條訂單數(shù)據(jù)的狀態(tài)變更即可向用戶推送消息。

    6.將數(shù)據(jù)庫變更整理成自己的數(shù)據(jù)格式發(fā)送到kafka等消息隊列,供消息隊列的消費者進行消費。

    四.CanalSharp的使用

    1.使用前的準備

    使用 CanalSharp 之前,必然要先準備好mysql數(shù)據(jù)庫以及Canal才行,這個步驟請直接查閱Canal官方文檔?https://github.com/alibaba/canal/wiki?。但是為了讓大家能快速跑通CanalSharp,CanalSharp 項目為大家提供了一個通過 docker-compose 同時運行 mysql和canal。

    2.通過docker-compose運行mysql和canal:

    git clone https://github.com/CanalSharp/CanalSharp.git cd docker docker-compose up -d

    出現(xiàn)下圖表示運行成功:

    3.使用navicat等數(shù)據(jù)庫管理工具連接mysql

    ip:運行docker的服務器ip

    mysql用戶:root

    mysql密碼:000000

    mysql端口:4406

    默認提供了一個test數(shù)據(jù)庫,然后有一張名為test的表。

    4.創(chuàng)建一個 .NET Core 控制臺項目

    5.添加 Nuget 程序包

    Install-Package CanalSharp.Client

    6.編碼

    也可以直接下載源碼運行 Sample 項目?https://github.com/CanalSharp/CanalSharp/tree/master/sample/CanalSharp.SimpleClient

    (3)輸出數(shù)據(jù)

    7.測試運行

    首次運行會輸出一堆數(shù)據(jù),那些都是初始化運行創(chuàng)建表的數(shù)據(jù),忽略即可

    運行項目,然后一次執(zhí)行sql觀察輸出:

    insert into test values(1000,'111');update test set name='222' where id=1000;delete from test where id=1000;

    通過新標簽頁打開圖片

    可以看見我們分別執(zhí)行 insert、update、delete 語句,我們的CanalSharp都獲取到了數(shù)據(jù)庫變更。

    五.使用Canal的經(jīng)驗

    1.mysql數(shù)據(jù)庫版本有要求:5.7.13, 5.6.10,、5.5.18和5.1.40/48,不一定非要滿足小版本號的要求,比如 5.7.x、5.6.x、5.5.x都應該可以,但是實際需要自己做測試。前面的具體版本號是Canal官方提供的資料,但是博主公司用的mysql 的版本是5.5.60,是可以正常使用Canal的。

    2.mysql數(shù)據(jù)binlog的格式強烈建議設置為row

    3.Canal并非必須連接到master數(shù)據(jù)庫,它同樣可以連接到slave數(shù)據(jù)庫,只是從庫出了需要開啟寫入binlog以外還需要設置?log-slave-updates?開啟。

    4.如果生產(chǎn)環(huán)境已經(jīng)存在mysql集群,且集群主庫的binlog格式為mixed,mysql數(shù)據(jù)庫集群的主庫binlog格式可以不用改依然為 mixed,設置某一個從庫binlog格式配置為 row,讓Canal連接從庫,這樣可以避免對生產(chǎn)環(huán)境的mysql集群產(chǎn)生影響。

    5.mysql支持Statement,MiXED,以及ROW三種格式的binlog為什么推薦使用row格式binlog,經(jīng)過博主實際測試,使用row格式兼容性是最好的,實際可以自己測試。

    六.結束語

    CanalSharp的介紹到這里就結束了,如果覺得這個項目有用的歡迎大家來個 star 。后續(xù)將會寫幾篇文章介紹更詳細的使用方法以及實戰(zhàn)。

    七.資料

    CanalSharp 開源地址:https://github.com/CanalSharp/CanalSharp

    Canal 開源地址:https://github.com/alibaba/canal

    原文地址:?https://www.cnblogs.com/stulzq/p/9702385.html


    .NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

    總結

    以上是生活随笔為你收集整理的CanalSharp-mysql数据库binlog的增量订阅消费组件Canal的.NET客户端的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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