POC的目的:
1、与MYSQL的对接方式,配置文档
2、订阅的延迟
3、订阅后宕机消息会不会丢失
4、能不能从指定的点开始重新订阅
5、高并发写入的时候,日志的顺序是否还能保持,不考虑消费的情况订阅是否会延迟

###写完word文档直接拷贝过来,格式一般般。。。

Canal介绍

官网地址:https://github.com/alibaba/canal

Mysql主备复制原理

从上层来看,复制分成三步:

  1. master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看);
  2. slave将master的binary log events拷贝到它的中继日志(relay log);
  3. slave重做中继日志中的事件,将改变反映它自己的数据。

Canal工作原理

  1. 原理相对比较简单:
  2. canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
  3. mysql master收到dump请求,开始推送binary log给slave(也就是canal)
  4. canal解析binary log对象(原始为byte流)

Canal安装部署

下载canal

直接下载,访问:https://github.com/alibaba/canal/releases,也可以在linux上直接联网下载:

服务端包:https://github.com/alibaba/canal/releases/download/v1.0.23/canal.deployer-1.0.23.tar.gz

客户端包:https://github.com/alibaba/canal/releases/download/v1.0.23/canal.example-1.0.23.tar.gz

解压canal

Mkdir /app/canal

Mkdir /app/canal-example

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

MySQL配置修改

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

Canal配置修改

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 = .*\\..*
 
#################################################

说明:

  • canal.instance.connectionCharset 代表数据库的编码方式对应到java中的编码类型,比如UTF-8,GBK , ISO-8859-1

Canal-Server启停

sh bin/startup.sh 启动
sh bin/stop.sh  停止
vi logs/canal/canal.log  查看canal日志
vi logs/example/example.log  查看instance的日志

Canal-Client启停

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-Client开发

到此为止整个canal环境搭建完成。

不过canal-example是一个已经编译好的包,如果我们需要对源码进行修改,输出一些我们自己想要的信息,可以重新开发canal客户端。

客户端源码官方下载地址:https://github.com/alibaba/canal/wiki/ClientExample

Canal-Server HA配置

更多配置策略请参考官方文档: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>
    <groupId>com.alibaba.otter</groupId>
    <artifactId>canal.client</artifactId>
    <version>1.0.22</version>
</dependency>

Canal POC

消费位点

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)

  • canal.instance.master.journal.name + canal.instance.master.position : 精确指定一个binlog位点,进行启动
  • canal.instance.master.timestamp : 指定一个时间戳,canal会自动遍历mysql binlog,找到对应时间戳的binlog位点后,进行启动
  • 不指定任何信息:默认从当前数据库的位点,进行启动。(show master status)

另外,可以从一个指定的点开始获取日志:

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 server单点

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 server集群(两个节点-主从)

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

MySQL增量订阅&消费组件Canal POC的更多相关文章

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

    一.前言 CanalSharp是阿里巴巴开源项目mysql数据库binlog的增量订阅&消费组件 Canal 的.NET客户端,关于什么是 Canal?又能做什么?我会在后文为大家一一介绍.C ...

  2. canal —— 阿里巴巴mysql数据库binlog的增量订阅&消费组件

    阿里巴巴mysql数据库binlog的增量订阅&消费组件canal ,转载自  https://github.com/alibaba/canal 最新更新 canal QQ讨论群已经建立,群号 ...

  3. alibaba/canal 阿里巴巴 mysql 数据库 binlog 增量订阅&消费组件

    基于日志增量订阅&消费支持的业务: 数据库镜像 数据库实时备份 多级索引 (卖家和买家各自分库索引) search build 业务cache刷新 价格变化等重要业务消息 项目介绍 名称:ca ...

  4. Canal - 数据同步 - 阿里巴巴 MySQL binlog 增量订阅&消费组件

    背景 早期,阿里巴巴 B2B 公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求 ,主要是基于trigger的方式获取增量变更.从 2010 年开始,公司开始逐步尝试数据库日志解析,获取增量变 ...

  5. 阿里数据迁移DTS【otter】和阿里巴巴mysql数据库binlog的增量订阅&消费组件 【canal】

    [链接]alibaba/otterhttps://github.com/alibaba/otter https://github.com/alibaba/canal

  6. 阿里巴巴开源项目: canal 基于mysql数据库binlog的增量订阅&消费

    背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.不过早期的数据库同步业务,主要是基于trigger的方式获取增 量变更,不过从2010年开始,阿里系公司开始逐步的 ...

  7. 阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费

    背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝 ...

  8. 基于Spark Streaming + Canal + Kafka对Mysql增量数据实时进行监测分析

    Spark Streaming可以用于实时流项目的开发,实时流项目的数据源除了可以来源于日志.文件.网络端口等,常常也有这种需求,那就是实时分析处理MySQL中的增量数据.面对这种需求当然我们可以通过 ...

  9. Canal:同步mysql增量数据工具,一篇详解核心知识点

    老刘是一名即将找工作的研二学生,写博客一方面是总结大数据开发的知识点,一方面是希望能够帮助伙伴让自学从此不求人.由于老刘是自学大数据开发,博客中肯定会存在一些不足,还希望大家能够批评指正,让我们一起进 ...

随机推荐

  1. 微信小程序 页面跳转传递数据

    点击view 跳转页面 <view class="album_image" data-album-obj="{{item}}" bindtap=" ...

  2. python进阶学习笔记(二)

    1.模块和包的概念 python的解决方案是把同名的模块放到不同的包中 1.1,导入模块 要使用一个模块,我们必须首先导入该模块.Python使用import语句导入一个模块.例如,导入系统自带的模块 ...

  3. Activiti 中的ACT_RU_TASK表中的EXECUTION_ID和PROC_INST_ID区别

    当你的流程图为单向的时候则EXECUTION_ID和PROC_INST_ID是一样的 这种的流程图的话是一样的 这种的话就到支流是不一样的由于在节点处进行了分支,导致这个有三个方案.导致里面的分支分离 ...

  4. java 23种设计模式 深入理解

    以下是学习过程中查询的资料,别人总结的资料,比较容易理解(站在各位巨人的肩膀上,望博主勿究) 创建型抽象工厂模式 http://www.cnblogs.com/java-my-life/archive ...

  5. C语言_初步了解一下指针

    指针的基本概念 在计算机中,所有的数据都是存放在存储器中的. 一般把存储器中的一个字节称为一个内存单元, 不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等.为了正确地访问这 ...

  6. Mysql的锁机制与PHP文件锁处理高并发简单思路

    以购买商品举例: ① 从数据库获取库存的数量. ② 检查一下库存的数量是否充足. ③ 库存的数量减去买家购买的数量(以每个用户购买一个为例). ④ 最后完成购买. 仅仅这几行逻辑代码在并发的情况下会出 ...

  7. markdown学习经验

    文章首发于我的github博客 前言 markdown是一种简洁有力的文本编辑语言.由于它十分好用,我将所有的博客都换成了markdown编辑器. 学习方法 工具为先,从工具中学习,熟能生巧. 工具选 ...

  8. Elasticsearch安装使用

    在网上有很多那种ES步骤和问题的解决 方案的,不过没有一个详细的整合,和问题的梳理:我就想着闲暇之余,来记录一下自己安装的过程以及碰到的问题和心得:有什么不对的和问题希望及时拍砖. 第一步:环境 li ...

  9. HI3531的DDR3配置流程

    DDR3 初始化配置流程 系统上电之后,必须先完成DDR3 SDRAM 的初始化操作,系统才能访问DDR3 SDRAM.在进行初始化之前需要注意以下几点: 对DDR3 SDRAM 进行上电操作时,需要 ...

  10. 小说接入UC浏览器内核技术对话(二)

    质辛@灿岩 质辛跟我们说一下那个删除文件的逻辑吧质辛@灿岩  应该不是删除cache下所有文件吧?质辛质辛@智鹰  提供一下我们的临时文件完整路径给 灿岩吧质辛@智鹰  是负责我们ucsdk的 技术对 ...