1. 使用场景
- canal deployer 为 canal 标准包,可将其看做 canal server。它负责伪装成 mysql 从库,接收、解析 binlog 并投递到指定的目标端(RDS、MQ 或 canal adapter)
- canal adapter 为 canal 的客户端,可将其看作 canal client。其中 RDB 包括 Oracle、MySQL、PostgreSQL、SQLServer 等数据库
2. canal deployer 包参数详解
2.1. canal deployer 包目录结构
tree canal 展开源码
- bin —— 存放启动、重启、停止脚本
- conf —— 配置文件目录
- lib —— 存放库文件,不用操作该目录
- logs —— 存放日志目录
2.2. conf 目录
tree canal conf 展开源码
- canal.properties —— canal 程序主配置文件
argument |
说明 |
默认值 |
示例(--为保持默认) |
canal.ip |
canal server绑定的本地IP信息,如果不配置,默认选择一个本机IP进行启动服务 |
无 |
|
canal.register.ip |
canal server 向 zk 集群中注册的 ip |
无 |
|
canal.port |
canal server提供socket服务的端口 |
11111 |
-- |
canal.metrics.pull.port |
监控接口端口(配合Prometheus使用) |
11112 |
-- |
canal.admin.port |
canal admin 的访问端口 |
11110 |
-- |
canal.admin.user |
canal admin 的登陆用户 |
admin |
-- |
canal.admin.passwd |
canal admin 的登陆用户密码 |
-- |
|
canal.zkServers |
zookeeper 服务器集群地址 |
-- |
|
canal.zookeeper.flush.period |
canal持久化数据到zookeeper上的更新频率,单位毫秒 |
1000 |
-- |
canal.withoutNetty |
是否关闭server端的netty服务 |
false |
-- |
canal.serverMode |
tcp:客户端通过tcp方式从Canal服务端拉取增量数据 kafka:Canal服务端将增量数据同步到kafka中,客户端从kafka消费数据,此时客户端感知不到Canal的存在,只需要跟kafka交互 RocketMQ:同kafka,增量数据同步到RocketMQ中 |
tcp |
-- |
canal.file.data.dir |
flush meta cursor/parse position to file。记录消费位点到文件,当使用spring/file-instance.xml配置文件时 |
${canal.conf.dir} |
-- |
canal.file.flush.period |
canal持久化数据到文件上的更新频率,单位毫秒 |
1000 |
-- |
canal.instance.memory.buffer.size |
canal内存store中可缓存buffer记录数,需要为2的指数 |
16384 |
-- |
canal.instance.memory.buffer.memunit |
内存记录的单位大小,默认1KB,和buffer.size组合决定最终的内存使用大小 |
1024 |
-- |
canal.instance.memory.batch.mode |
canal内存store中数据缓存模式 |
MEMSIZE |
-- |
canal.instance.memory.rawEntry |
batch.mode 相关参数,默认即可 |
true |
-- |
canal.instance.detecting.enable |
是否开启心跳检查 |
false |
-- |
canal.instance.detecting.sql |
心跳检查sql |
select 1 |
-- |
canal.instance.detecting.interval.time |
心跳检查频率,单位秒 |
3 |
-- |
canal.instance.detecting.retry.threshold |
心跳检查失败重试次数 |
3 |
-- |
canal.instance.detecting.heartbeatHaEnable |
心跳检查失败后,是否开启自动mysql自动切换 |
false |
-- |
canal.instance.transaction.size |
最大事务完整解析的长度支持。超过该长度后,一个事务可能会被拆分成多次提交到canal store中,无法保证事务的完整可见性 |
1024 |
-- |
canal.instance.fallbackIntervalInSeconds |
canal发生mysql切换时,在新的mysql库上查找binlog时需要往前查找的时间,单位秒 |
60 |
-- |
canal.instance.network.receiveBufferSize |
网络链接参数,SocketOptions.SO_RCVBUF |
16384 |
-- |
canal.instance.network.sendBufferSize |
网络链接参数,SocketOptions.SO_SNDBUF |
16384 |
-- |
canal.instance.network.soTimeout |
网络链接参数,SocketOptions.SO_TIMEOUT |
30 |
-- |
canal.instance.filter.druid.ddl |
是否使用druid处理所有的ddl解析来获取库和表名 |
true |
-- |
canal.instance.filter.query.dcl |
是否忽略dcl语句 |
false |
-- |
canal.instance.filter.query.dml |
是否忽略dml语句 |
false |
-- |
canal.instance.filter.query.ddl |
是否忽略ddl语句 |
false |
-- |
canal.instance.filter.table.error |
是否忽略binlog表结构获取失败的异常 |
false |
-- |
canal.instance.filter.rows |
是否忽略dml的数据变更事件 |
false |
-- |
canal.instance.filter.transaction.entry |
是否忽略事务头和尾,比如针对写入kakfa的消息时,不需要写入TransactionBegin/Transactionend事件 |
false |
-- |
canal.instance.binlog.format |
支持的binlog/format格式列表 |
ROW,STATEMENT,MIXED |
-- |
canal.instance.binlog.image |
支持的binlog/image格式列表 |
FULL,MINIMAL,NOBLOB |
-- |
canal.instance.get.ddl.isolation |
ddl语句是否单独一个batch返回 |
false |
-- |
canal.instance.parser.parallel |
是否开启binlog并行解析模式 |
true |
-- |
canal.instance.parser.parallelBufferSize |
binlog并行解析的异步ringbuffer队列 |
256 |
-- |
canal.instance.tsdb.enable |
是否开启tablemeta的 tsdb 功能 |
true |
false |
canal.instance.tsdb.dir |
主要针对h2-tsdb.xml时对应h2文件的存放目录,默认为conf/xx/h2.mv.db |
[Math Processing Error]�����.����.����.���:../����/{canal.instance.destination:} |
-- |
canal.instance.tsdb.url |
jdbc url的配置 |
jdbc:h2:${canal.instance.tsdb.dir}/h2;CACHE_SIZE=1000;MODE=MYSQL; |
-- |
canal.instance.tsdb.dbUsername |
tsdb用户名 |
canal |
-- |
canal.instance.tsdb.dbPassword |
tsdb密码 |
canal |
-- |
canal.instance.tsdb.snapshot.interval |
导出快照间隔,默认24小时 |
24 |
-- |
canal.instance.tsdb.snapshot.expire |
清理快照时间间隔,默认360小时 |
360 |
-- |
canal.aliyun.accessKey |
阿里云 access key(如果不需要在本地binlog超过18小时被清理后自动下载oss上的binlog,可以忽略该值) |
无 |
-- |
canal.aliyun.secretKey |
阿里云 secret key(如果不需要在本地binlog超过18小时被清理后自动下载oss上的binlog,可以忽略该值) |
无 |
-- |
- logback.xml —— 日志功能配置文件,一般不用修改
- metrics —— 监控项配置文件目录
- spring —— spring 框架配置文件目录,其中 *-instance.xml 文件用于指定 binlog 的位点信息存放于文件、内存、zk 等位置
- default-instance.xml: store选择了内存模式,其余的parser/sink依赖的位点管理选择了持久化模式,目前持久化的方式主要是写入zookeeper,保证数据集群共享。
- 特点:支持HA
- 场景:生产环境,集群化部署.
- memory-instance.xml:所有的组件(parser , sink , store)都选择了内存版模式,记录位点的都选择了memory模式,重启后又会回到初始位点进行解析。
- 特点:速度最快,依赖最少(不需要zookeeper)
- 场景:一般应用在quickstart,或者是出现问题后,进行数据分析的场景,不应该将其应用于生产环境
- group-instance.xml:主要针对需要进行多库合并时,可以将多个物理instance合并为一个逻辑instance,提供客户端访问。
- file-instance.xml:store选择了内存模式,其余的parser/sink依赖的位点管理选择了持久化模式,目前持久化的方式主要是写入文件,文件位置在instance目录下meta.dat,当前Canal节点重启会从该文件读取解析位置,无法在数据集群共享。
- default-instance.xml: store选择了内存模式,其余的parser/sink依赖的位点管理选择了持久化模式,目前持久化的方式主要是写入zookeeper,保证数据集群共享。
- mid_db —— 为 canal 实例配置文件,主要配置 mysql binlog 的起始位置、表过滤、MQ 目标 topic 等信息
2.3. canal.properties 文件详解
- canal.properties 文件分为了4大部分
- common argument
- destinations
- MQ
- Kafka Kerberos Info
2.3.1. common argument 部分
2.3.2. destinations 部分
argument |
说明 |
默认值 |
示例 |
canal.destinations |
当前server上部署的instance列表,多个实例用逗号分隔 |
无 |
mysql_mysql |
canal.conf.dir |
conf 目录所在的路径 |
../conf |
-- |
canal.auto.scan |
开启instance自动扫描 |
true |
-- |
canal.auto.scan.interval |
instance自动扫描的间隔时间,单位秒 |
5 |
-- |
canal.instance.tsdb.spring.xml |
tsdb 的 xml 配置文件 |
classpath:spring/tsdb/h2-tsdb.xml |
-- |
canal.instance.global.mode |
全局配置加载方式 |
spring |
-- |
canal.instance.global.lazy |
全局lazy模式 |
false |
-- |
canal.instance.global.manager.address |
全局的manager配置方式的连接信息 |
${canal.admin.manager} |
-- |
canal.instance.global.spring.xml |
全局的spring配置方式的组件文件,连接 zk 使用 default 文件 |
classpath:spring/file-instance.xml |
classpath:spring/default-instance.xml |
2.3.3. MQ 部分
argument |
说明 |
默认值 |
示例 |
canal.mq.servers |
kafka为bootstrap.servers |
127.0.0.1:6667 |
-- |
canal.mq.retries |
发送失败重试次数 |
0 |
-- |
canal.mq.batchSize |
kafka为ProducerConfig.BATCH_SIZE_CONFIG |
16384 |
-- |
canal.mq.maxRequestSize |
kafka为ProducerConfig.MAX_REQUEST_SIZE_CONFIG |
1048576 |
-- |
canal.mq.lingerMs |
kafka为ProducerConfig.LINGER_MS_CONFIG , 如果是flatMessage格式建议将该值调大, 如: 200 |
100 |
-- |
canal.mq.bufferMemory |
kafka为ProducerConfig.BUFFER_MEMORY_CONFIG |
33554432 |
-- |
canal.mq.canalBatchSize |
Canal的batch size, 默认50K, 由于kafka最大消息体限制请勿超过1M(900K以下) |
50 |
-- |
canal.mq.canalGetTimeout |
Canal get数据的超时时间, 单位: 毫秒, 空为不限超时 |
100 |
-- |
canal.mq.flatMessage |
是否为flat json格式对象 |
true |
-- |
canal.mq.compressionType |
压缩类型 |
none |
-- |
canal.mq.acks |
kafka为ProducerConfig.ACKS_CONFIG |
all |
-- |
canal.mq.producerGroup |
kafka无意义 |
Canal-Producer |
-- |
canal.mq.accessChannel |
kafka无意义 |
local |
-- |
2.3.4. Kafka Kerberos Info 部分
argument |
说明 |
默认值 |
示例(--为保持默认) |
canal.mq.kafka.kerberos.enable |
kafka为ProducerConfig.ACKS_CONFIG |
false |
-- |
canal.mq.kafka.kerberos.krb5FilePath |
kafka kerberos认证 |
"../conf/kerberos/krb5.conf" |
-- |
canal.mq.kafka.kerberos.jaasFilePath |
kafka kerberos认证 |
"../conf/kerberos/jaas.conf" |
-- |