Mysql+Canal+ElasticSearch实现数据同步

1.canal简介

canal主要用于对mysql的增量日志进行解析(请注意,只支持增量解析,不支持全量解析),提供增量数据的订阅和消费,对mysql增量数据进行实时同步,支持同步到mysql、elasticsearch、hbase等数据源

1.1 canal常用组件

  • canal-deployer(canal-server):
    监听mysql的binlog,把自己伪装成mysql slave,只负责接收数据,不做数据处理
  • canal-adapter:
    canal客户端,从canal-server中获取数据,对数据进行同步,可以同步到mysql、elasticsearch、hbase等数据源
  • canal-admin:
    提供整体配置管理、节点运维等功能,web界面方便用户快速和安全的操作

1.2 工作原理

Mysql+Canal+ElasticSearch实现数据同步_第1张图片

  • canal模拟mysql master slave的交互协议,把自己伪装mysql slave,向mysql master发送dump协议(dump用于备份)
  • mysql master接收到dump请求,向canal推送binlog
  • canal通过解析binlog,将数据同步到其他的数据源

2.版本介绍

Mysql+Canal+ElasticSearch实现数据同步_第2张图片

GitHub下载Canal:https://github.com/alibaba/canal/releases/tag/canal-1.1.5
百度云盘:https://pan.baidu.com/s/1oosDiSeOjvxt-ZUA8Ad9fA
提取码:1234

软件 版本
mysql 5.7.16
canal.adapter 1.1.5
canal.deployer 1.1.5
elasticsearch 7.13.2

3.Mysql配置

Mysql+Canal+ElasticSearch实现数据同步_第3张图片
my.ini文件下配置如下配置,配置完成后需要重启
Mysql+Canal+ElasticSearch实现数据同步_第4张图片

[mysqld]

# server Id
server-id=1
#log-bin
log-bin=mysql-bin
binlog-format=ROW
#single DB
binlog-do-db=canaltest

重启后查看binlog是否启用

show variables like '%log_bin%';

Mysql+Canal+ElasticSearch实现数据同步_第5张图片
创建数据库

create database canaltest;
CREATE TABLE `book`(
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(25) NOT NULL,
 PRIMARY KEY (`id`) USING BTREE
)AUTO_INCREMENT = 25 CHARACTER SET = utf8;

Mysql+Canal+ElasticSearch实现数据同步_第6张图片

4.elasticsearch配置

在elasticsearch的\config\elasticsearch.yml 如下配置

Mysql+Canal+ElasticSearch实现数据同步_第7张图片
使用国产神器ApiPost(和Postman一样的) 输入http://localhost:9200/canaltest_book/
索引名为:数据库名_表名
Mysql+Canal+ElasticSearch实现数据同步_第8张图片

{
    "mappings": {
    	"properties": {
    	  "id":{
    	    "type": "integer"
    	  },
    		"name": {
    			"type": "text"
    		}
    	}	
    }
}

5.canal.deployer配置

conf\example\instance.properties中进行如下配置
Mysql+Canal+ElasticSearch实现数据同步_第9张图片
双击bin文件夹下的startup.bat就可以启动了

6.canal.adapter配置

若无法正常启动可看此篇文章:https://blog.csdn.net/chshzh2000/article/details/118491050

conf/application.yml进行如下配置
要注意到的是hosts后加的是http://127.0.0.1:9200 而不是127.0.0.1:9200
Mysql+Canal+ElasticSearch实现数据同步_第10张图片

  srcDataSources:
    defaultDS:
      url: jdbc:mysql://127.0.0.1:3306/canaltest?useUnicode=true
      username: root
      password: 123456
  canalAdapters:
  - instance: example # canal instance Name or mq topic name
    groups:
    - groupId: g1
      outerAdapters:
      - name: logger
      - name: es7
        key: exampleKey
        hosts: http://127.0.0.1:9200
        properties:
            mode: rest   #transport
            cluster.name: elasticsearch

conf\es7\mytest_user.yml下进行如下配置
Mysql+Canal+ElasticSearch实现数据同步_第11张图片

7.测试

启动elasticsearch–>canal.deployer–>canal.adapter
Mysql+Canal+ElasticSearch实现数据同步_第12张图片

INSERT into book VALUES(default,"三国");

查看ElasticSearch
Mysql+Canal+ElasticSearch实现数据同步_第13张图片
遇到有如此提示,则代表成功
Mysql+Canal+ElasticSearch实现数据同步_第14张图片
若不能写入es:如下面情况

请替换canal-adapter的plugin目录下的client-adapter.es7x-1.1.5-jar-with-dependencies.jar
笔者提供的安装包中有

你可能感兴趣的:(ElasticSearch,大数据,中间件)