在分布式开发中,如果数据库中标的数据被修改,怎样让数据保持同步呢?
下面主要介绍一下利用Canal+RabbitMQ实现Elaticsearch与MySQL的数据同步:
以分布式在线教育系统为例:
实现步骤:
1.课程服务队数据库课程表进行增删改的操作,MySQL就将binlog发送给Canal。
2.数据同步服务通过Canal监听器获得具体的数据,将数据发送给RabbitMQ消息队列。
3.搜索服务通过监听RabbitMQ消息队列获得数据,然后将数据同步更新到ElasticSearch中。
Canal简介
Canal是阿里巴巴的数据同步工具,最初主要为了应对杭州和美国的双机房部署问题,目前也是国内互联网企业经常使用的数据增量同步解决方案。
Canal原理:
-
canal将自己伪装为MySQL的slave,向master发送dump协议
-
master收到dump协议,数据发生修改后推送binary log给canal
-
canal解析binary log对象,转换为增量数据,同步到ES、Redis等
Canal客户端
官方客户端见官网,这里只写第三方客户端,地址如下:
https://github.com/chenqian56131/spring-boot-starter-canal
1) 引入依赖
首先下载该开源项目,安装到本地的maven中,在项目中就可以使用该依赖
在idea这个位置添加cannal