Canal adapter1.1.5安装部署配置(3)

使用前必须先安装Canal server,Canal最新1.1.5版安装部署(1)

安装

#进入安装包
cd /opt
 
#下载安装包
wget https://github.com/alibaba/canal/releases/download/canal-1.1.5-alpha-2/canal.adapter-1.1.5-SNAPSHOT.tar.gz
 
#创建安装目录
mkdir canal-adapter1.1.5
 
#解压到指定目录
tar zxvf canal.adapter-1.1.5-SNAPSHOT.tar.gz -C ./canal-adapter1.1.5

配置

本质上是一个Spring boot项目

cd canal-adapter1.1.5
vim conf/application.yml
server:
  port: 8081 #adapter 服务端口
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
    default-property-inclusion: non_null
canal.conf:
  mode: tcp # tcp - canal server读取模式, kafka rocketMQ
  flatMessage: true
  zookeeperHosts:  # adapter集群环境配置,主备锁。
  syncBatchSize: 100 #批处理条数 #当一次dml大于syncBatchSize时,拆分成每次1000进行提交
  retries: 1 #重试次数 ,-1堵塞一直重试。默认1次。
  timeout: 500 #同步超时 默认500
  accessKey:
  secretKey:
  consumerProperties: # 消息服务消费端地址,根据mode读取
    # canal tcp consumer
    canal.tcp.server.host: {canalServer}:11111 # cancal地址
    canal.tcp.zookeeper.hosts: # 如果配置了canalServerHost, 则以canalServerHost为准
    canal.tcp.batch.size: 500
    canal.tcp.username:
    canal.tcp.password:
    # kafka consumer
    kafka.bootstrap.servers: 127.0.0.1:9092
    kafka.enable.auto.commit: false
    kafka.auto.commit.interval.ms: 1000
    # latest:不存在offset时,消费最新的消息
    # earliest:不存在offset时,从最早消息开始消费
    # none :不存在offset时,直接报错
    kafka.auto.offset.reset: latest 
    kafka.request.timeout.ms: 40000 #必须必session.timeout.ms大
    kafka.session.timeout.ms: 30000
    kafka.isolation.level: read_committed # 事物隔离级别
    kafka.max.poll.records: 1000 # 一次调用poll()操作时返回的最大记录数
    # rocketMQ consumer
    rocketmq.namespace:
    rocketmq.namesrv.addr: 127.0.0.1:9876
    rocketmq.batch.size: 1000
    rocketmq.enable.message.trace: false
    rocketmq.customized.trace.topic:
    rocketmq.access.channel:
    rocketmq.subscribe.filter:
    # rabbitMQ consumer
    rabbitmq.host:
    rabbitmq.virtual.host:
    rabbitmq.username:
    rabbitmq.password:
    rabbitmq.resource.ownerId:

  srcDataSources:
    defaultDS: #支持多数据源
      url: jdbc:mysql://{mysql}:3306/test?useUnicode=true
      username: canal
      password: canal
  canalAdapters: # 同步适配器列表,同步到哪各数据源
  - instance: example # canal 实例名或者 MQ topic 名
    groups: # 适配器组,支持多个不同入库数据源
    - groupId: g1 # 分组id, 如果是MQ模式将用到该值
      outerAdapters: # 分组内适配器列表
      - name: logger # 打印获取到的消息数据日志
#      - name: rdb
#        key: mysql1
#        properties:
#          jdbc.driverClassName: com.mysql.jdbc.Driver
#          jdbc.url: jdbc:mysql://127.0.0.1:3306/mytest2?useUnicode=true
#          jdbc.username: root
#          jdbc.password: 121212
#      - name: rdb
#        key: oracle1
#        properties:
#          jdbc.driverClassName: oracle.jdbc.OracleDriver
#          jdbc.url: jdbc:oracle:thin:@localhost:49161:XE
#          jdbc.username: mytest
#          jdbc.password: m121212
#      - name: rdb
#        key: postgres1
#        properties:
#          jdbc.driverClassName: org.postgresql.Driver
#          jdbc.url: jdbc:postgresql://localhost:5432/postgres
#          jdbc.username: postgres
#          jdbc.password: 121212
#          threads: 1
#          commitSize: 3000
#      - name: hbase
#        properties:
#          hbase.zookeeper.quorum: 127.0.0.1
#          hbase.zookeeper.property.clientPort: 2181
#          zookeeper.znode.parent: /hbase
      - name: es7 #用于匹配Adapter,如 ES7xAdapter
        key: es-user #必须有key,否则是比es里面的配置
        hosts: {es}:9200 # 127.0.0.1:9200 for rest mode
        properties:
          mode: rest # 9300对应transport or 9200对应rest
          # security.auth: test:123456 #  only used for rest mode
          cluster.name: elasticsearch
#        - name: kudu
#          key: kudu
#          properties:
#            kudu.master.address: 127.0.0.1 # ',' split multi address

根据配置的适配器name,adapter将会自动加载 conf/{name}下的所有.yml结尾的配置文件,如conf/es相关配置。

adapter数据源配置

存量数据需要先进行数据同步

  •  es7
vim conf/es7/mytest_user.yml
dataSourceKey: defaultDS #源数据源的key, 对应上面配置的srcDataSources中的值
outerAdapterKey: es-user # 对应application.yml中es配置的key
destination: example # cannal的instance或者MQ的topic
groupId: g1 # 对应MQ模式下的groupId, 只会同步对应groupId的数据
esMapping:
  _index: mytest_user # es 的索引名称
  _type: _doc # es 的type名称, es7下无需配置此项
  _id: id # es 的_id, 如果不配置该项必须配置下面的pk项_id则会由es自动分配
  upsert: true # 支持不存在新增操作
#  pk: id
  sql: "select t.id,t.username,t.phone from t_user t" #需要更新的所有字段都需写上
#  objFields:
#    _labels: array:; # 数组或者对象属性, array:; 代表以;字段里面是以;分隔的
  etlCondition: "where a.c_time>={}" # etl 的条件参数,通过服务的etl接口传入。
  commitBatch: 3000 # 提交批大小
  • Mysql
vim conf/rdb/mytest_user.yml
dataSourceKey: defaultDS #源数据源的key, 对应上面配置的srcDataSources中的值
outerAdapterKey: rdb-user # 对应application.yml中rdb配置的key
destination: example # cannal的instance或者MQ的topic
groupId: g1 # 对应MQ模式下的groupId, 只会同步对应groupId的数据
concurrent: true
dbMapping:
  database: erm # 源数据库
  table: orderdeposit_dz # 源数据表
  targetDb: erm # 目标库
  targetTable: orderdeposit_dz_canal #目标表
  targetPk: #目标表主键字段 Map<String, String>
    id: id
  mapAll: true # 映射所有字段
    sql: "select t.id,t.username,t.phone from t_user t" #需要更新的所有字段都需写上
#  objFields:
#    _labels: array:; # 数组或者对象属性, array:; 代表以;字段里面是以;分隔的
  commitBatch: 3000 # 批量提交的大小
  currentTimestampFields: createdAt, updatedAt # 强制同步时间字段,防止目标数据源自动变更时间。

每个adapter数据源配置会生产一个id,生产规则为 destination + “-” + groupId + “_” + database + “-” + table。

  • database :defaultDS中的库名,如jdbc:mysql://{mysql}:3306/test?useUnicode=true中的test
  • table:sql中的主表,如select t.id as _id from t_user t中的t_user。

远程配置中心方式(mysql)

在使用canal-admin时使用manager_ddl.sql脚本创建的库中进行配置,也可以自己单独弄一个。

application.yml配置:

  • 在canal_config表中创建id为2的记录
  • 设置字段name值为application.yml
  • content值为application.yml文件中的内容(直接拷贝粘贴)
  • content_md5值为内容md5标识(暂时没啥用,可以随便写一个)
  • 默认3秒刷新一次

  • 多集群可以通过修改DbRemoteConfigLoader类中的sql进行修改
String sql = "select name, content, modified_time from canal_config where id=2";

adapter数据配置:

  • 在canal_adapter_config表中新增记录
  • 设置字段category为了adapter数据源类型,如es7、rdb、hbase等,对应conf下的目录
  • 设置name为adapter文件名,如mytest_user.yml(必须.yml结尾),对应conf/{db type}下的目录.如conf/es7/mytest_user.yml,该路径作为程序中的配置主键用于区分不同的配置。
  • content内容为adapter数据源配置文件里的内容,mytest_user.yml的内容

开启远程配置

修改conf/bootstrap.yml内容,开启后会拉取数据库中的配置覆盖到本地。

vim conf/bootstrap.yml

canal:
  # adapter远程配置库连接
  manager:
    jdbc:
      url: jdbc:mysql://127.0.0.1:3306/canal_manager?useUnicode=true&characterEncoding=UTF-8
      username: canal
      password: canal

启动

bin/startup.sh

CanalAdapter1.1.5版本问题收集

成功

tailf logs/adapter/adapter.log

2021-01-15 20:53:18.752 [pool-2-thread-1] INFO  c.a.o.canal.client.adapter.logger.LoggerAdapterExample - DML: {"data":[{"id":4,"username":"s44s08","sex":1,"phone":"138212828282","createtime":1610715198000}],"database":"test","destination":"example","es":1610715198000,"groupId":"g1","isDdl":false,"old":[{"username":"44s08","createtime":1610714369000}],"pkNames":["id"],"sql":"","table":"t_user","ts":1610715198636,"type":"UPDATE"}
2021-01-15 20:53:24.241 [pool-2-thread-1] DEBUG c.a.o.canal.client.adapter.es.core.service.ESSyncService - DML: {"data":[{"id":4,"username":"s44s08","sex":1,"phone":"138212828282","createtime":1610715198000}],"database":"test","destination":"example","es":1610715198000,"groupId":"g1","isDdl":false,"old":[{"username":"44s08","createtime":1610714369000}],"pkNames":["id"],"sql":"","table":"t_user","ts":1610715198636,"type":"UPDATE"} 
Affected indexes: mytest_user 

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lizz666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值