简介
说明
本文介绍使用canal将数据从MySQL同步到ElasticSearch的方案。
有如下三种实现方案:
- client-adapter(canal-adapter服务)
- 无需编写代码,只修改配置文件即可进行同步
- 目前支持:
- 关系型数据库(MySQL、Oracle、PostgresSQL、SQLServer)
- HBase
- MongoDB
- ElasticSearch单表同步
- 后续会支持
- ElasticSearch多表同步
- Redis
- Java代码订阅canal数据
- 写代码连接到canal服务器,订阅canal数据。
- 灵活度很高,接收到数据后可以自由处理。
- Java代码订阅canal通过MQ发出的消息
- 目前支持RocketMQ、Kafka。
- 需要编写代码。
- 灵活度很高,接收到数据后可以自由处理。
官网
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 流)
原理图
方案1:ClientAdapter
简介
- 无需编写代码,只修改配置文件即可进行同步
- 目前支持:
- 关系型数据库(MySQL、Oracle、PostgresSQL、SQLServer)
- HBase
- MongoDB
- ElasticSearch单表同步
- 后续会支持
- ElasticSearch多表同步
- Redis
官网
https://github.com/alibaba/canal/wiki/ClientAdapter
实例
mysql增量同步 - canal - SegmentFault 思否
方案2:订阅canal
简介
- 写代码连接到canal服务器,订阅canal数据。
- 灵活度很高,接收到数据后可以自由处理。
官网
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