【Canal】数据同步的终极解决方案,阿里巴巴开源的Canal框架当之无愧

由于我们在配置Canal时,没有指定用户名和密码,所以,我们还需要将如下代码。

CanalConnector connector = CanalConnectors.newSingleConnector(

new InetSocketAddress(ip, 11111),

destination,

“canal”,

“canal”);

修改为:

CanalConnector connector = CanalConnectors.newSingleConnector(

new InetSocketAddress(ip, 11111),

destination,

“”,

“”);

修改完成后,运行main方法启动程序。

测试数据变更

接下来,在MySQL中创建一个canaldb数据库。

create database canaldb;

此时会在IDEA的命令行输出相关的日志信息。


  • Batch Id: [7] ,count : [3] , memsize : [149] , Time : 2020-08-05 23:25:35

  • Start : [mysql-bin.000007:6180:1540286735000(2020-08-05 23:25:35)]

  • End : [mysql-bin.000007:6356:1540286735000(2020-08-05 23:25:35)]


接下来,我在canaldb数据库中创建数据表,并对数据表中的数据进行增删改查,程序输出的日志信息如下所示。

#在mysql进行数据变更后,这里会显示mysql的bin日志。


  • Batch Id: [7] ,count : [3] , memsize : [149] , Time : 2020-08-05 23:25:35

  • Start : [mysql-bin.000007:6180:1540286735000(2020-08-05 23:25:35)]

  • End : [mysql-bin.000007:6356:1540286735000(2020-08-05 23:25:35)]


================> binlog[mysql-bin.000007:6180] , executeTime : 1540286735000(2020-08-05 23:25:35) , gtid : () , delay : 393ms

BEGIN ----> Thread id: 43

----------------> binlog[mysql-bin.000007:6311] , name[canal,canal_table] , eventType : DELETE , executeTime : 1540286735000(2020-08-05 23:25:35) , gtid : () , delay : 393 ms

id : 8 type=int(10) unsigned

name : 512 type=varchar(255)


END ----> transaction id: 249

================> binlog[mysql-bin.000007:6356] , executeTime : 1540286735000(2020-08-05 23:25:35) , gtid : () , delay : 394ms


  • Batch Id: [8] ,count : [3] , memsize : [149] , Time : 2020-08-05 23:25:35

  • Start : [mysql-bin.000007:6387:1540286869000(2020-08-05 23:25:49)]

  • End : [mysql-bin.000007:6563:1540286869000(2020-08-05 23:25:49)]


================> binlog[mysql-bin.000007:6387] , executeTime : 1540286869000(2020-08-05 23:25:49) , gtid : () , delay : 976ms

BEGIN ----> Thread id: 43

----------------> binlog[mysql-bin.000007:6518] , name[canal,canal_table] , eventType : INSERT , executeTime : 1540286869000(2020-08-05 23:25:49) , gtid : () , delay : 976 ms

id : 21 type=int(10) unsigned update=true

name : aaa type=varchar(255) update=true


END ----> transaction id: 250

================> binlog[mysql-bin.000007:6563] , executeTime : 1540286869000(2020-08-05 23:25:49) , gtid : () , delay : 977ms


  • Batch Id: [9] ,count : [3] , memsize : [161] , Time : 2020-08-05 23:26:22

  • Start : [mysql-bin.000007:6594:1540286902000(2020-08-05 23:26:22)]

  • End : [mysql-bin.000007:6782:1540286902000(2020-08-05 23:26:22)]


================> binlog[mysql-bin.000007:6594] , executeTime : 1540286902000(2020-08-05 23:26:22) , gtid : () , delay : 712ms

BEGIN ----> Thread id: 43

----------------> binlog[mysql-bin.000007:6725] , name[canal,canal_table] , eventType : UPDATE , executeTime : 1540286902000(2020-08-05 23:26:22) , gtid : () , delay : 712 ms

id : 21 type=int(10) unsigned

name : aaac type=varchar(255) update=true


END ----> transaction id: 252

================> binlog[mysql-bin.000007:6782] , executeTime : 1540286902000(2020-08-05 23:26:22) , gtid : () , delay : 713ms

数据同步实现


需求

将数据库数据的变化, 通过canal解析binlog日志, 实时更新到solr的索引库中。

具体实现

创建工程

创建Maven工程mykit-canal-demo,并在pom.xml文件中添加如下配置。

com.alibaba.otter

canal.client

1.0.24

com.alibaba.otter

canal.protocol

1.0.24

commons-lang

commons-lang

2.6

org.codehaus.jackson

jackson-mapper-asl

1.8.9

org.apache.solr

solr-solrj

4.10.3

junit

junit

4.9

test

创建log4j配置文件

在工程的src/main/resources目录下创建log4j.properties文件,内容如下所示。

log4j.rootCategory=debug, CONSOLE

CONSOLE is set to be a ConsoleAppender using a PatternLayout.

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout

log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

LOGFILE is set to be a File appender using a PatternLayout.

log4j.appender.LOGFILE=org.apache.log4j.FileAppender

log4j.appender.LOGFILE.File=d:\axis.log

log4j.appender.LOGFILE.Append=true

log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout

log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

创建实体类

在io.mykit.canal.demo.bean包下创建一个Book实体类,用于测试Canal的数据传输,如下所示。

package

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值