简介

说明

        本文介绍使用canal将数据从MySQL同步到ElasticSearch的方案。

        有如下三种实现方案:


  1. client-adapter(canal-adapter服务)

  1. 无需编写代码,只修改配置文件即可进行同步
  2. 目前支持:

  1. 关系型数据库(MySQL、Oracle、PostgresSQL、SQLServer)
  2. HBase
  3. MongoDB
  4. ElasticSearch单表同步

  1. 后续会支持

  1. ElasticSearch多表同步
  2. Redis


  1. Java代码订阅canal数据

  1. 写代码连接到canal服务器,订阅canal数据。
  2. 灵活度很高,接收到数据后可以自由处理。

  1. Java代码订阅canal通过MQ发出的消息

  1. 目前支持RocketMQ、Kafka。
  2. 需要编写代码。
  3. 灵活度很高,接收到数据后可以自由处理。


官网

wiki:​​https://github.com/alibaba/canal/wiki​​​

快速开始:​​https://github.com/alibaba/canal/wiki/QuickStart​​​

canal-admin:​​https://github.com/alibaba/canal/wiki/Canal-Admin-QuickStart​​​

canal简介

说明

        canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。

        canal只支持增量同步,不支持全量同步。   

工作原理


  • canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送 dump 协议
  • MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
  • canal 解析 binary log 对象(原始为 byte 流)

原理图 

canal--将MySQL的数据同步到ElasticSearch_elasticsearch

方案1:ClientAdapter

简介


  1. 无需编写代码,只修改配置文件即可进行同步
  2. 目前支持:

  1. 关系型数据库(MySQL、Oracle、PostgresSQL、SQLServer)
  2. HBase
  3. MongoDB
  4. ElasticSearch单表同步

  1. 后续会支持

  1. ElasticSearch多表同步
  2. Redis


官网

​https://github.com/alibaba/canal/wiki/ClientAdapter​

实例

​mysql增量同步 - canal - SegmentFault 思否​

方案2:订阅canal

简介


  1. 写代码连接到canal服务器,订阅canal数据。
  2. 灵活度很高,接收到数据后可以自由处理。

官网

​ClientAPI · alibaba/canal Wiki · GitHub​

实例

 ​​mysql增量同步 - canal - SegmentFault 思否​

方案3:订阅canal的MQ

简介

        canal 1.1.1版本之后, 默认支持将canal server接收到的binlog数据直接投递到MQ, 目前默认支持的MQ系统有:RocketMQ、kafka。

官网

​https://github.com/alibaba/canal/wiki/Canal-Kafka-RocketMQ-QuickStart​