本文将介绍canal项目中client-adapter的使用,以及落地生产中需要考虑的可靠性、高可用与监控报警。(基于canal 1.1.4版本)
canal作为mysql的实时数据订阅组件,实现了对mysql binlog数据的抓取。
虽然阿里也开源了一个纯粹从mysql同步数据到mysql的项目otter(github.com/alibaba/otter,基于canal的),实现了mysql的单向同步、双向同步等能力。但是我们经常有从mysql同步数据到es、hbase等存储的需求,就需要用户自己用canal-client获取数据进行消费,比较麻烦。
从1.1.1版本开始,canal实现了一个配套的落地模块,实现对canal订阅的消息进行消费,就是client-adapter(github.com/alibaba/canal/wiki/ClientAdapter)。
目前的最新稳定版1.1.4版本中,client-adapter已经实现了同步数据到RDS、ES、HBase的能力。
1. Client-Adapter基本能力
目前Adapter具备以下基本能力:
- 对接上游消息,包括kafka、rocketmq、canal-server
- 实现mysql数据的增量同步
- 实现mysql数据的全量同步
- 下游写入支持mysql、es、hbase
2.Client-Adapter架构
Adapter本质上是为了将canal-server订阅到的实时增量数据进行消费,所以必须有上游canal-server产生数据。
整体架构如下:
3. 迁移与同步配置(以Mysql为例)
官方文档地址:github.com/alibaba/canal/wiki/Sync-RDB
下面给出实践过程中的注意事项。
3.1 参数配置
1)总配置文件application.yml
说明:
- 一份数据可以被多个group同时消费, 多个group之间会是一个并行执行, 一个group内部是一个串行执行多个outerAdapters, 比如例子