POC的目的:
一、與MYSQL的對接方式,配置文檔
二、訂閱的延遲
三、訂閱後宕機消息會不會丟失
四、能不能從指定的點開始從新訂閱
五、高併發寫入的時候,日誌的順序是否還能保持,不考慮消費的狀況訂閱是否會延遲java
官網地址:https://github.com/alibaba/canalmysql
從上層來看,複製分紅三步:linux
直接下載,訪問:https://github.com/alibaba/canal/releases,也能夠在linux上直接聯網下載:git
服務端包:https://github.com/alibaba/canal/releases/download/v1.0.23/canal.deployer-1.0.23.tar.gzgithub
客戶端包:https://github.com/alibaba/canal/releases/download/v1.0.23/canal.example-1.0.23.tar.gz算法
Mkdir /app/canalspring
Mkdir /app/canal-examplesql
Tar zxvf canal.deployer-1.0.23.tar.gz -C /app/canal數據庫
Tar zxvf canal.example-1.0.23.tar.gz -C /app/canal-example數組
a. canal的原理是基於mysql binlog技術,因此這裏必定須要開啓mysql的binlog寫入功能,建議配置binlog模式爲row.
**針對阿里雲RDS帳號默認已經有binlog dump權限,不須要任何權限或者binlog設置,能夠直接跳過這一步**
[mysqld]
log-bin=mysql-bin #添加這一行就ok
binlog-format=ROW #選擇row模式
server_id=1 #配置mysql replaction須要定義,不能和canal的slaveId重複
b. canal的原理是模擬本身爲mysql slave,因此這裏必定須要作爲mysql slave的相關權限.
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;
針對已有的帳戶可直接經過grant
vi conf/example/instance.properties
#################################################
## mysql serverId
canal.instance.mysql.slaveId = 1234
# position info,須要改爲本身的數據庫信息
canal.instance.master.address = 172.16.0.158:3306
canal.instance.master.journal.name =
canal.instance.master.position =
canal.instance.master.timestamp =
#canal.instance.standby.address =
#canal.instance.standby.journal.name =
#canal.instance.standby.position =
#canal.instance.standby.timestamp =
# username/password,須要改爲本身的數據庫信息
canal.instance.dbUsername = canal
canal.instance.dbPassword = canal
canal.instance.defaultDatabaseName =canal
canal.instance.connectionCharset = UTF-8
# table regex
canal.instance.filter.regex = .*\\..*
#################################################
說明:
sh bin/startup.sh 啓動
sh bin/stop.sh 中止
vi logs/canal/canal.log 查看canal日誌
vi logs/example/example.log 查看instance的日誌
Cd /app/canal-example
sh bin/startup.sh 啓動canal客戶端
sh bin/stop.sh 中止canal客戶端
tail -f /app/canal-example/logs/example/entry.log 查看canal客戶端訂閱的日誌
嘗試修改mysql數據庫,如上述咱們配置的庫是canal,咱們建立一個userinfo的用戶表,能夠在entry.log裏面打印出userinfo的信息
到此爲止整個canal環境搭建完成。
不過canal-example是一個已經編譯好的包,若是咱們須要對源碼進行修改,輸出一些咱們本身想要的信息,能夠從新開發canal客戶端。
客戶端源碼官方下載地址:https://github.com/alibaba/canal/wiki/ClientExample
更多配置策略請參考官方文檔:https://github.com/alibaba/canal/wiki/AdminGuide
a. 修改canal.properties,加上zookeeper配置
canal.zkServers=172.16.7.122:2181
canal.instance.global.spring.xml = classpath:spring/default-instance.xml
b. 建立example目錄,並修改instance.properties
canal.instance.mysql.slaveId = 1234 ##另一臺機器改爲1235,保證slaveId不重複便可
canal.instance.master.address = 172.16.0.158:3306
注意: 兩臺機器上的instance目錄的名字須要保證徹底一致,HA模式是依賴於instance name進行管理,同時必須都選擇default-instance.xml配置
啓動兩臺機器的canal,啓動後,你能夠查看logs/example/example.log,只會看到一臺機器上出現了啓動成功的日誌。查看一下zookeeper中的節點信息,也能夠知道當前工做的節點爲172.16.0.157:11111
Canal pom版本須要1.0.22或以上,不然zkclient可能發生衝突
<dependency>
|
Canal client接收到日誌以後要提交ack確認
connector.ack(batchId); // 提交確認 |
canal server在接收了客戶端的ack後,就會記錄客戶端提交的最後位點,若是canal client沒有提交位點,則下一次canal client啓動的時候 會將最後記錄的位點把日誌從新推送過來,直到canal client提交ack確認爲止。
Canal-server單點模式下,訂閱延遲平均22.65毫秒,HA模式下,訂閱延遲平均24.16毫秒,具體數據請參考附錄。
中止正在工做的172.16.0.157的canal server,這時172.16.0.158會立馬啓動example instance,提供新的數據服務。與此同時,客戶端也會隨着canal server的切換,經過獲取zookeeper中的最新地址,與新的canal server創建連接,繼續消費數據,整個過程自動完成。
mysql連接時的起始位置(instance.properties)
另外,能夠從一個指定的點開始獲取日誌:
CanalEntry.getHeader().getLogfileOffset() |
高併發下測試方案:
mysql的主鍵id是自增的,不管業務如何高併發,但插入到mysql的id確定是自增且有序的,咱們以此爲基準來判斷canal訂閱到日誌是否也是有序的。
首先在canal客戶端獲取id列的值,分批存入一個數組,而後對這個數組進行冒泡排序,若是在冒泡算法中出現一次冒泡,則說明canal訂閱到的日誌出現亂序。
實驗結果:
本地開發機(i5-5200U CPU @2.2GHz 2.19GHz 8Gb內存),共開啓1000個線程,每一個線程插入1000條記錄,mysql最大鏈接數設置1000,總共100萬條記錄,canal client沒有輸出亂序日誌,而且canal client輸入的分批次(canal自動分批)size總和爲100萬。另外,當插入數據庫動做完成以後,canal-client輸出也同時完成,說明訂閱並無出現較大的延遲,整個過程持續840s,1190tps/s。
數據庫也共100萬條記錄:
canal-client收到日誌時間 |
mysql插入時間 |
訂閱延遲(ms) |
1489994604188.00 |
1489994604142.00 |
46.00 |
1489994605180.00 |
1489994605149.00 |
31.00 |
1489994606165.00 |
1489994606151.00 |
14.00 |
1489994607165.00 |
1489994607153.00 |
12.00 |
1489994608199.00 |
1489994608155.00 |
44.00 |
1489994609199.00 |
1489994609157.00 |
42.00 |
1489994610187.00 |
1489994610160.00 |
27.00 |
1489994611184.00 |
1489994611163.00 |
21.00 |
1489994612176.00 |
1489994612172.00 |
4.00 |
1489994613208.00 |
1489994613174.00 |
34.00 |
1489994614197.00 |
1489994614175.00 |
22.00 |
1489994615186.00 |
1489994615176.00 |
10.00 |
1489994616184.00 |
1489994616178.00 |
6.00 |
1489994617189.00 |
1489994617180.00 |
9.00 |
1489994618208.00 |
1489994618182.00 |
26.00 |
1489994619206.00 |
1489994619185.00 |
21.00 |
1489994620202.00 |
1489994620187.00 |
15.00 |
1489994621195.00 |
1489994621188.00 |
7.00 |
1489994622230.00 |
1489994622189.00 |
41.00 |
1489994623220.00 |
1489994623190.00 |
30.00 |
1489994624210.00 |
1489994624192.00 |
18.00 |
1489994625202.00 |
1489994625195.00 |
7.00 |
1489994626236.00 |
1489994626199.00 |
37.00 |
1489994627227.00 |
1489994627200.00 |
27.00 |
1489994628217.00 |
1489994628202.00 |
15.00 |
1489994629211.00 |
1489994629203.00 |
8.00 |
1489994630212.00 |
1489994630205.00 |
7.00 |
1489994631210.00 |
1489994631206.00 |
4.00 |
1489994632249.00 |
1489994632208.00 |
41.00 |
1489994633250.00 |
1489994633210.00 |
40.00 |
1489994634215.00 |
1489994634211.00 |
4.00 |
1489994635216.00 |
1489994635212.00 |
4.00 |
1489994636257.00 |
1489994636214.00 |
43.00 |
1489994637285.00 |
1489994637241.00 |
44.00 |
1489994638278.00 |
1489994638243.00 |
35.00 |
1489994639283.00 |
1489994639246.00 |
37.00 |
1489994640283.00 |
1489994640248.00 |
35.00 |
1489994641271.00 |
1489994641250.00 |
21.00 |
1489994642262.00 |
1489994642251.00 |
11.00 |
1489994643255.00 |
1489994643252.00 |
3.00 |
1489994644268.00 |
1489994644254.00 |
14.00 |
1489994645268.00 |
1489994645255.00 |
13.00 |
1489994646300.00 |
1489994646256.00 |
44.00 |
1489994647292.00 |
1489994647259.00 |
33.00 |
1489994648287.00 |
1489994648260.00 |
27.00 |
1489994649273.00 |
1489994649262.00 |
11.00 |
1489994650267.00 |
1489994650263.00 |
4.00 |
1489994651302.00 |
1489994651265.00 |
37.00 |
1489994652293.00 |
1489994652268.00 |
25.00 |
1489994653288.00 |
1489994653270.00 |
18.00 |
1489994654298.00 |
1489994654271.00 |
27.00 |
1489994655289.00 |
1489994655273.00 |
16.00 |
1489994656278.00 |
1489994656275.00 |
3.00 |
1489994657282.00 |
1489994657277.00 |
5.00 |
1489994658325.00 |
1489994658280.00 |
45.00 |
1489994659313.00 |
1489994659282.00 |
31.00 |
1489994660291.00 |
1489994660284.00 |
7.00 |
1489994661299.00 |
1489994661286.00 |
13.00 |
1489994662290.00 |
1489994662287.00 |
3.00 |
1489994663331.00 |
1489994663288.00 |
43.00 |
1489994664318.00 |
1489994664291.00 |
27.00 |
1489994665332.00 |
1489994665293.00 |
39.00 |
1489994666327.00 |
1489994666295.00 |
32.00 |
1489994667321.00 |
1489994667297.00 |
24.00 |
1489994668315.00 |
1489994668300.00 |
15.00 |
1489994669316.00 |
1489994669301.00 |
15.00 |
1489994670311.00 |
1489994670302.00 |
9.00 |
1489994671334.00 |
1489994671304.00 |
30.00 |
1489994672334.00 |
1489994672306.00 |
28.00 |
1489994673332.00 |
1489994673307.00 |
25.00 |
1489994674327.00 |
1489994674309.00 |
18.00 |
1489994675324.00 |
1489994675310.00 |
14.00 |
1489994676317.00 |
1489994676312.00 |
5.00 |
1489994677325.00 |
1489994677313.00 |
12.00 |
1489994678319.00 |
1489994678314.00 |
5.00 |
1489994679352.00 |
1489994679315.00 |
37.00 |
1489994680356.00 |
1489994680317.00 |
39.00 |
1489994681351.00 |
1489994681318.00 |
33.00 |
1489994682344.00 |
1489994682320.00 |
24.00 |
1489994683342.00 |
1489994683324.00 |
18.00 |
1489994684369.00 |
1489994684326.00 |
43.00 |
1489994685368.00 |
1489994685327.00 |
41.00 |
1489994686361.00 |
1489994686329.00 |
32.00 |
1489994687353.00 |
1489994687330.00 |
23.00 |
1489994688345.00 |
1489994688331.00 |
14.00 |
1489994689357.00 |
1489994689333.00 |
24.00 |
1489994690345.00 |
1489994690334.00 |
11.00 |
1489994691346.00 |
1489994691336.00 |
10.00 |
1489994692340.00 |
1489994692337.00 |
3.00 |
1489994693376.00 |
1489994693339.00 |
37.00 |
1489994694404.00 |
1489994694362.00 |
42.00 |
1489994695397.00 |
1489994695363.00 |
34.00 |
1489994696389.00 |
1489994696366.00 |
23.00 |
1489994697395.00 |
1489994697367.00 |
28.00 |
1489994698392.00 |
1489994698369.00 |
23.00 |
1489994699378.00 |
1489994699370.00 |
8.00 |
1489994700408.00 |
1489994700372.00 |
36.00 |
1489994701401.00 |
1489994701375.00 |
26.00 |
1489994702400.00 |
1489994702377.00 |
23.00 |
1489994703392.00 |
1489994703379.00 |
13.00 |
平均:22.65ms
canal-client收到日誌時間 |
mysql插入時間 |
訂閱延遲(s) |
1490007771482.00 |
1490007771476.00 |
6.00 |
1490007772508.00 |
1490007772478.00 |
30.00 |
1490007773524.00 |
1490007773488.00 |
36.00 |
1490007774494.00 |
1490007774489.00 |
5.00 |
1490007775512.00 |
1490007775491.00 |
21.00 |
1490007776527.00 |
1490007776493.00 |
34.00 |
1490007777552.00 |
1490007777500.00 |
52.00 |
1490007778539.00 |
1490007778502.00 |
37.00 |
1490007779522.00 |
1490007779504.00 |
18.00 |
1490007780528.00 |
1490007780506.00 |
22.00 |
1490007781538.00 |
1490007781521.00 |
17.00 |
1490007782552.00 |
1490007782523.00 |
29.00 |
1490007783531.00 |
1490007783525.00 |
6.00 |
1490007784551.00 |
1490007784527.00 |
24.00 |
1490007785562.00 |
1490007785528.00 |
34.00 |
1490007786567.00 |
1490007786530.00 |
37.00 |
1490007787539.00 |
1490007787531.00 |
8.00 |
1490007788558.00 |
1490007788532.00 |
26.00 |
1490007789576.00 |
1490007789534.00 |
42.00 |
1490007790576.00 |
1490007790536.00 |
40.00 |
1490007791540.00 |
1490007791537.00 |
3.00 |
1490007792584.00 |
1490007792539.00 |
45.00 |
1490007793555.00 |
1490007793541.00 |
14.00 |
1490007794565.00 |
1490007794543.00 |
22.00 |
1490007795573.00 |
1490007795544.00 |
29.00 |
1490007796590.00 |
1490007796545.00 |
45.00 |
1490007797562.00 |
1490007797547.00 |
15.00 |
1490007798565.00 |
1490007798548.00 |
17.00 |
1490007799572.00 |
1490007799551.00 |
21.00 |
1490007800568.00 |
1490007800553.00 |
15.00 |
1490007801580.00 |
1490007801554.00 |
26.00 |
1490007802588.00 |
1490007802555.00 |
33.00 |
1490007803595.00 |
1490007803557.00 |
38.00 |
1490007804577.00 |
1490007804558.00 |
19.00 |
1490007805583.00 |
1490007805559.00 |
24.00 |
1490007806596.00 |
1490007806560.00 |
36.00 |
1490007807566.00 |
1490007807562.00 |
4.00 |
1490007808581.00 |
1490007808564.00 |
17.00 |
1490007809596.00 |
1490007809567.00 |
29.00 |
1490007810607.00 |
1490007810570.00 |
37.00 |
1490007811578.00 |
1490007811571.00 |
7.00 |
1490007812591.00 |
1490007812572.00 |
19.00 |
1490007813610.00 |
1490007813586.00 |
24.00 |
1490007814629.00 |
1490007814588.00 |
41.00 |
1490007815601.00 |
1490007815590.00 |
11.00 |
1490007816614.00 |
1490007816591.00 |
23.00 |
1490007817622.00 |
1490007817592.00 |
30.00 |
1490007818600.00 |
1490007818594.00 |
6.00 |
1490007819611.00 |
1490007819596.00 |
15.00 |
1490007820612.00 |
1490007820598.00 |
14.00 |
1490007821623.00 |
1490007821600.00 |
23.00 |
1490007822632.00 |
1490007822602.00 |
30.00 |
1490007823641.00 |
1490007823618.00 |
23.00 |
1490007824641.00 |
1490007824619.00 |
22.00 |
1490007825658.00 |
1490007825621.00 |
37.00 |
1490007826664.00 |
1490007826622.00 |
42.00 |
1490007827632.00 |
1490007827623.00 |
9.00 |
1490007828646.00 |
1490007828625.00 |
21.00 |
1490007829633.00 |
1490007829627.00 |
6.00 |
1490007830650.00 |
1490007830628.00 |
22.00 |
1490007831660.00 |
1490007831630.00 |
30.00 |
1490007832672.00 |
1490007832631.00 |
41.00 |
1490007833645.00 |
1490007833633.00 |
12.00 |
1490007834656.00 |
1490007834635.00 |
21.00 |
1490007835668.00 |
1490007835637.00 |
31.00 |
1490007836661.00 |
1490007836639.00 |
22.00 |
1490007837668.00 |
1490007837640.00 |
28.00 |
1490007838678.00 |
1490007838642.00 |
36.00 |
1490007839689.00 |
1490007839644.00 |
45.00 |
1490007840665.00 |
1490007840646.00 |
19.00 |
1490007841666.00 |
1490007841647.00 |
19.00 |
1490007842677.00 |
1490007842649.00 |
28.00 |
1490007843688.00 |
1490007843662.00 |
26.00 |
1490007844699.00 |
1490007844667.00 |
32.00 |
1490007845703.00 |
1490007845669.00 |
34.00 |
1490007846696.00 |
1490007846672.00 |
24.00 |
1490007847696.00 |
1490007847674.00 |
22.00 |
1490007848704.00 |
1490007848678.00 |
26.00 |
1490007849715.00 |
1490007849680.00 |
35.00 |
1490007850698.00 |
1490007850681.00 |
17.00 |
1490007851703.00 |
1490007851682.00 |
21.00 |
1490007852714.00 |
1490007852684.00 |
30.00 |
1490007853722.00 |
1490007853685.00 |
37.00 |
1490007854692.00 |
1490007854687.00 |
5.00 |
1490007855733.00 |
1490007855689.00 |
44.00 |
1490007856702.00 |
1490007856690.00 |
12.00 |
1490007857702.00 |
1490007857692.00 |
10.00 |
1490007858726.00 |
1490007858693.00 |
33.00 |
1490007859699.00 |
1490007859694.00 |
5.00 |
1490007860720.00 |
1490007860695.00 |
25.00 |
1490007861720.00 |
1490007861697.00 |
23.00 |
1490007862728.00 |
1490007862698.00 |
30.00 |
1490007863705.00 |
1490007863700.00 |
5.00 |
1490007864706.00 |
1490007864701.00 |
5.00 |
平均:24.16ms