一 前言:
我们都知道一个系统最重要的是数据,而数据是保存在数据库里,但是很多时候不单止要保存在数据库中,还要同步保存到Elastic Search、HBase、Redis等等,那么我们将如何把数据同步到其他的存储引擎中呢?
传统的同步手段无非是通过业务逻辑中代码的调用,但是这样业务和数据同步功能存在不小的耦合性,所以觉得这种方式不是很优雅,后期扩展性也不是很强,这时突然了解到阿里开源的框架Canal,它可以很方便地同步数据库的增量数据到其他的存储应用
官网提供的示意图:
二 搭建Mysql服务器
当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x
1.Mysql安装完成后创建一个用户并赋予权限
eg:
-- 使用命令登录:mysql -u root -p
-- 创建用户 用户名:canal 密码:123456
create user 'canal'@'%' identified by '123456';
-- 授权 *.*表示所有库
grant SELECT, REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'canal'@'%' identified by 'Canal@123456';
2。用户创建完成后更改Mysql配置文件信息(配置文件为my.ini),配置的目的是为了打开binlog模式
[mysqld]
# 打开binlog
log-bin=mysql-bin
# 选择ROW(行)模式
binlog-format=ROW
# 配置MySQL replaction需要定义,不要和canal的slaveId重复
server_id=1
3.配置完成后重启Mysql服务查看binlog模式是否已经开启
show VARIABLES like 'log_bin'
4.查看binlog日志文件
SHOW BINARY LOGS
至此Mysql安装以及相关配置操作结束
三 搭建canal
1.安装canal
官网下载页面进行下载:https://github.com/alibaba/canal/releases
我下载的是1.1.4版本
2.解压文件
3.配置canal.properties ( 路径:conf//canal.properties)
#设置服务模式为RocketMq
canal.serverMode = RocketMQ
#修改默认的读取文件 默认设置为h2-tsdb.xml
canal.instance.tsdb.spring.xml = classpath:spring/tsdb/mysql-tsdb.xml
#配置Mq信息
canal.mq.servers = 127.0.0.1:9876
canal.mq.producerGroup = canal-producer
4.配置instance.properties ( 路径:conf/example/instance.properties)
#配置数据库地址
canal.instance.master.address=127.0.0.1:3306
#p配置数据库用户名和登录密码
canal.instance.dbUsername=root
canal.instance.dbPassword=20210219
#指定监听数据库以及匹配规则
canal.instance.defaultDatabaseName = storage
canal.instance.filter.regex=storage\\..*
#配置Mq topicName
canal.mq.topic=canal-producer
5.配置完成后启动canal服务
这里用的是win10系统,所以在bin目录下找到startup.bat启动:
tips: 启动会报错 解决方法如下:
将红框内容删除即可
至此canal相关配置结束
四 搭建RocketMQ
1.下载RocketMQ文件 地址:http://rocketmq.apache.org/release_notes/release-notes-4.9.0/
2.解压文件
3.打开bin目录执行 start mqnamesrv.cmd 命令启动 NAMESERVER
4.继续在bin目录下执行start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true命令启动BROKER
tips: 启动RocketMQ服务需要Jdk环境变量配置正确,否则将无法正常启动
五 搭建RocketMQ可视化控制台
1.下载RocketMQ控制台文件 地址:https://github.com/apache/rocketmq-externals
2.解压文件
3.进入rocketmq-console
4.进入rocketmq-console的src/main/resources/ 修改application.properties
#配置rocketmq.config.namesrvAddr属性的值,即nameserver的服务地址
rocketmq.config.namesrvAddr=127.0.0.1:9876
5.保存修改后的配置文件,返回rocketmq-console目录
#使用maven打包命令打包
mvn clean package -Dmaven.test.skip=true
tips:打包操作需要Maven环境变量配置正确,否则将打包失败
6.打包完成后进入target目录执行命令
java -jar rocketmq-console-ng-2.0.0.jar
7.运行成功后在浏览器中输入ip:8080即可看到控制台界面
至此RocketMQ可视化控制台搭建完成