canal配置加载方式

image.png
配置加载的两种方式

  1. ManagerCanalInstanceGenerator:通过网络读取canal的相关配置信息
  2. SpringCanalInstanceGenerator:基于本地spring的xml文件获取配置

    ManagerCanalInstanceGenerator方式

    没用过,暂略

    SpringCanalInstanceGenerator方式

    这种方式的配置抽象为2个部分:

    • xxx-instance.xml:多个instance共享

image.png

  • instance.properties:每个instance独占一份

image.png
通过Spring的PropertyPlaceholderConfigurer通过机制将其融合,生成一份instance实例对象。
image.png

properties文件的分类

  • canal.properties:系统根配置文件,定义canal-server的配置以及每个instance的一些公共配置
  • instance.properties:每个instance一份,定义各自instance的配置信息

    canal.properties介绍

    一份canal.properties分为两大块定义:

    • instance列表定义:列出canal-server上有哪些instance以及每个instance的加载方式
    • common参数定义:每个instance.properties的公用参数配置在这里

      instance列表配置项

      | 配置项 | 参数说明 | 默认值 | 配置方式 | | —- | —- | —- | —- | | canal.destinations | 指定当前server上部署的instance列表 | 无 | accont,xxxx,xxx, | | canal.conf.dir | 配置文件所在的目录 | ../conf | | | canal.auto.scan | 开启自动扫描conf中的目录,并将conf/${目录名}中的目录名作为instance的名称,并监听相关目录信息变动 | true | true/false | | canal.auto.scan.interval | 自动扫描的间隔时间
      单位s | 5 | | | canal.instance.global.mode | 全局加载的方式 | spring | | | canal.instance.global.lazy | 懒加载是否开启 | | true/false | | canal.instance.global.manager.address | mode=spring时用不到 | | | | canal.instance.global.spring.xml | 全局的spring配置方式的组件文件 | spring/memory-instance.xml | | | canal.instance.example.mode
      canal.instance.example.lazy
      canal.instance.example.spring.xml
      …. | 标橙色的配置对全部instance有效。想要单独某个instance配置需要以
      canal.instance.{name}.配置项 这种方式指定 | | | | canal.instance.tsdb.spring.xml | 全局的tsdb配置方式的组件文件 | spring/tsdb/h2-tsdb.xml | 这个默认配置就好,目前我不清楚其作用 |

common参数配置项

instance.properties的参数优先级高于common中的参数

参数名字 参数说明 默认值 配置方式
canal.id 每个canal server实例的唯一标识,暂无实际意义 1
canal.ip canal server绑定的本地IP信息,如果不配置,默认选择一个本机IP进行启动服务
canal.register.ip canal注册到外部的ip信息(如注册到zk的地址)
canal.port canal server提供socket服务的端口
canal.zkServers canal server链接zookeeper集群的链接信息
canal.zookeeper.flush.period canal持久化数据到zookeeper上的更新频率,单位毫秒
canal.instance.memory.batch.mode canal内存store中数据缓存模式
1. ITEMSIZE : 根据buffer.size进行限制,只限制记录的数量
2. MEMSIZE : 根据buffer.size * buffer.memunit的大小,限制缓存记录的大小
MEMSIZE
canal.instance.memory.buffer.size mode=ITEMSIZE
canal.instance.memory.buffer.memunit mode=MEMSIZE
canal.instance.fallbackIntervalInSeconds canal发生mysql切换时,在新的mysql库上查找binlog时需要往前查找的时间,单位秒
说明:mysql主备库可能存在解析延迟或者时钟不统一,需要回退一段时间,保证数据不丢
canal.instance.detecting.enable
canal.instance.detecting.sql
canal.instance.detecting.interval.time
canal.instance.detecting.retry.threshold
canal.instance.detecting.heartbeatHaEnable
canal检测instance的一些配置

| | | | | | | | | | | | | | | | | | | | canal.instance.network.receiveBufferSize
canal.instance.network.sendBufferSize
canal.instance.network.soTimeout | 网络连接参数
| | | | canal.instance.binlog.format | 支持的binlog format格式列表 | | | | canal.instance.binlog.image | 支持的binlog image格式列表 | | | | canal.admin.manager | canal链接canal-admin的地址 (v1.1.4新增) | | | | canal.admin.port |
admin管理指令链接端口 (v1.1.4新增) | | | | canal.admin.user | admin管理指令链接的ACL配置 (v1.1.4新增) | | | | canal.admin.passwd |
admin管理指令链接的ACL配置 (v1.1.4新增) | 密码默认值为admin的密文 | | | canal.user |
canal数据端口订阅的ACL配置 (v1.1.4新增)
如果为空,代表不开启 | | | | canal.passwd |
canal数据端口订阅的ACL配置 (v1.1.4新增)
如果为空,代表不开启 | | |

instance.properties介绍

在canal.properties中指定了instance后,需要到conf文件夹下创建同名的目录,目录内放入instance.properties。
若canal.properties中未定义instance列表,但是开启了canal.auto.scan时,canal会将conf目录下的所有目录名作为instance,若目录下真的有instanc.properties文件,将会自动启动这个instance。conf目录下的目录的删除与新增都会触发instance的启停。

配置项 说明 默认值 配置方式
canal.instance.mysql.slaveId mysql集群配置中的serverId概念,需要保证和当前mysql集群中id唯一
(v1.1.x版本之后canal会自动生成,不需要手工指定)
会自动生成
canal.instance.master.address
canal.instance.master.journal.name
canal.instance.master.position
canal.instance.master.timestamp
canal.instance.master.gtid
MySQL主库相关配置
canal.instance.gtidon 是否启用mysql gtid的订阅模式
canal.instance.dbUsername
canal.instance.dbPassword
canal.instance.defaultDatabaseName
canal.instance.connectionCharset
指定数据库用户名密码默认连接库名
canal.instance.filter.regex mysql 数据解析关注的表,Perl正则表达式.
多个正则之间以逗号(,)分隔,转义符需要双斜杠(\\)

常见例子:
1. 所有表:. or .\\..
2. canal schema下所有表: canal\\..

3. canal下的以canal打头的表:canal\\.canal.
4. canal schema下的一张表:canal\\.test1
5. 多个规则组合使用:canal\\..
,mysql.test1,mysql.test2 (逗号分隔) | .\\.. | .意思是所有库
\\用于转移 .
.
意思是所有表 | | canal.instance.filter.black.regex | 不同步哪些表,规则同上 | | |

参考文章