还在为数据同步而苦恼吗?手把手教你实现canal数据同步(三)

发布时间:2021年09月17日作者:atguigu浏览次数:1,032

Canal实战之客户端适配器

canal 1.1.1版本之后, 增加客户端数据落地的适配及启动功能, 目前支持功能:

  • 客户端启动器
  • 同步管理REST接口
  • 日志适配器, 作为DEMO
  • 关系型数据库的数据同步(表对表同步), ETL功能
  • HBase的数据同步(表对表同步), ETL功能
  • ElasticSearch多表数据同步,ETL功能(新)
  • 后续支持redis、mongodb

适配器整体结构

client-adapter分为适配器和启动器两部分, 适配器为多个fat jar, 每个适配器会将自己所需的依赖打成一个包, 以SPI的方式让启动器动态加载, 目前所有支持的适配器都放置在plugin目录下。

启动器为 SpringBoot 项目, 运行目录结构为:

还在为数据同步而苦恼吗?手把手教你实现canal数据同步(三)

 

详细结构如下:

- bin
    restart.sh
    startup.bat
    startup.sh
    stop.sh
- conf
bootstrap.yml
    application.yml
    - es
    biz_order.yml
    customer.yml
    mytest_user.yml
    - hbase
        mytest_person2.yml
    - rdb
    mytest_user.yml
- lib
...
- logs
- plugin
client-adapter.elasticsearch-1.1.4-jar-with-dependencies.jar
    client-adapter.hbase-1.1.4-jar-with-dependencies.jar
    client-adapter.logger-1.1.4-jar-with-dependencies.jar
    client-adapter.rdb-1.1.4-jar-with-dependencies.jar

适配器配置介绍

总配置文件 application.yml:

canal.conf:
  canalServerHost: 127.0.0.1:11111     # 对应单机模式下的canal server的ip:port
  zookeeperHosts: slave1:2181          # 对应集群模式下的zk地址, 如果配置了canalServerHost, 则以canalServerHost为准
  mqServers: slave1:6667 #or rocketmq  # kafka或rocketMQ地址, 与canalServerHost不能并存
  flatMessage: true                    # 扁平message开关, 是否以json字符串形式投递数据, 仅在kafka/rocketMQ模式下有效
  batchSize: 50                        # 每次获取数据的批大小, 单位为K
  syncBatchSize: 1000                  # 每次同步的批数量
  retries: 0                           # 重试次数, -1为无限重试
  timeout:                             # 同步超时时间, 单位毫秒
  mode: tcp # kafka rocketMQ           # canal client的模式: tcp直连 kafka rocketMQ
  srcDataSources:                      # 源数据库
    defaultDS:                         # 自定义名称
      url: jdbc:mysql://127.0.0.1:3306/mytest?useUnicode=true   # jdbc url 
      username: root                                            # jdbc 账号
      password: 121212                                          # jdbc 密码
  canalAdapters:                       # 适配器列表
  - instance: example                  # canal 实例名或者 MQ topic 名
    groups:                            # 分组列表
    - groupId: g1                      # 分组id, 如果是MQ模式将用到该值
      outerAdapters:                   # 分组内适配器列表
      - name: logger                   # 日志打印适配器
......

说明:

1. 一份数据可以被多个group同时消费, 多个group之间会是一个并行执行, 一个group内部是一个串行执行多个outerAdapters, 比如例子中logger和hbase

2. 目前client adapter数据订阅的方式支持两种,直连canal server 或者 订阅kafka/RocketMQ的消息

适配器启动

前提:启动canal server (单机模式)

上传
canal.adapter-1.1.4.tar.gz到/opt目录下

1. 在/opt目录下创建canal-adapter目录:mkdir canal-adapter

2. 解压压缩包:tar -zxvf
canal.adapter-1.1.4.tar.gz -C canal-adapter

3. 修改conf/application.yml,如下

4. 启动:bin/startup.sh

server:
  port: 8081
logging:
  level:
    com.alibaba.otter.canal.client.adapter.hbase: DEBUG
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
    default-property-inclusion: non_null


canal.conf:
  canalServerHost: 127.0.0.1:11111
  batchSize: 500                            
  syncBatchSize: 1000                       
  retries: 0                               
  timeout:                                 
  mode: tcp 
  canalAdapters:                            
  - instance: example                       
    groups:                                 
    - groupId: g1                           
      outerAdapters:                        
      - name: logger

logger适配器:

最简单的处理, 将收到的变更事件通过日志打印的方式进行输出, 如配置所示, 只需要定义name: logger即可。

adapter管理REST接口

查询所有订阅同步的canal instance或MQ topic:

curl http://127.0.0.1:8081/destinations
还在为数据同步而苦恼吗?手把手教你实现canal数据同步(三)

 

数据同步开关:

curl http://127.0.0.1:8081/syncSwitch/example/off -X PUT

针对 example 这个canal instance/MQ topic 进行开关操作. off代表关闭, instance/topic下的同步将阻塞或者断开连接不再接收数据, on代表开启

注: 如果在配置文件中配置了 zookeeperHosts 项, 则会使用分布式锁来控制HA中的数据同步开关, 如果是单机模式则使用本地锁来控制开关

还在为数据同步而苦恼吗?手把手教你实现canal数据同步(三)

 

数据同步开关状态:

curl http://127.0.0.1:8081/syncSwitch/example

查看指定 canal instance/MQ topic 的数据同步开关状态

还在为数据同步而苦恼吗?手把手教你实现canal数据同步(三)

想要了解跟多关于大数据培训课程内容欢迎关注尚硅谷大数据培训,尚硅谷除了这些技术文章外还有免费的高质量大数据培训课程视频供广大学员下载学习。


上一篇:
下一篇:
相关课程

java培训 大数据培训 前端培训

关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
全国统一咨询电话:010-56253825
地址:北京市昌平区宏福科技园2号楼3层(北京校区)

深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦3层(上海校区)

武汉市东湖高新开发区东湖网谷(武汉校区)

西安市雁塔区和发智能大厦B座3层(西安校区)

成都市成华区北辰星拱青创园综合楼3层(成都校区)