github地址
canal
使用IDEA打开,注意国内加载慢的问题,解决方式如下:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><mirrors><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror><mirror><id>uk</id><mirrorOf>central</mirrorOf><name>Human Readable Name for this Mirror.</name><url>http://uk.maven.org/maven2/</url></mirror><mirror><id>CN</id><name>OSChina Central</name><url>http://maven.oschina.net/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror><mirror><id>nexus</id><name>internal nexus repository</name><url>http://repo.maven.apache.org/maven2</url><mirrorOf>central</mirrorOf></mirror></mirrors>
</settings>
编译成功
源码模块
Modules ‘canal.parse.driver’, ‘canal.sink’, ‘client-adapter.launcher’, ‘canal.client’, ‘canal.prometheus’ and 36 others were fully rebuilt due to project configuration/dependencies changes
admin模块:???
client模块:canal的客户端。核心接口为CanalConnector
client-adapter模块:???
common模块:主要是提供了一些公共的工具类和接口。
connector模块:???
driver模块和dbsync模块:从这两个模块的artifactId(canal.parse.driver、canal.parse.dbsync),就可以看出来,这两个模块实际上是parser模块的组件。事实上parser 是通过driver模块与mysql建立连接,从而获取到binlog。由于原始的binlog都是二进制流,需要解析成对应的binlog事件,这些binlog事件对象都定义在dbsync模块中,dbsync 模块来自于淘宝的tddl。
deployer:部署模块。通过该模块提供的CanalLauncher来启动canal server
docker模块:???
example模块:提供client模块使用案例。
filter模块:???
images:图片
instance模块:一个server有多个instance。每个instance都会模拟成一个mysql实例的slave。instance模块有四个核心组成部分:parser模块、sink模块、store模块,meta模块。核心接口为CanalInstance
meta模块:增量订阅&消费信息管理器,核心接口为CanalMetaManager,主要用于记录canal消费到的mysql binlog的位置
parse模块:数据源接入,模拟slave协议和master进行交互,协议解析。parser模块依赖于dbsync、driver模块。
prometheus模块:
protocol模块:client和server模块之间的通信协议
server模块:canal服务器端。核心接口为CanalServer
sink模块:parser和store链接器,进行数据过滤,加工,分发的工作。核心接口为CanalEventSink
store模块:数据存储。核心接口为CanalEventStore
通过deployer模块,启动一个canal-server,一个cannal-server内部包含多个instance,每个instance都会伪装成一个mysql实例的slave。client与server之间的通信协议由protocol模块定义。client在订阅binlog信息时,需要传递一个destination参数,server会根据这个destination确定由哪一个instance为其提供服务。
项目目录
D:\SRC\CANAL
├─.github
│ └─ISSUE_TEMPLATE
├─.idea
├─.mvn
│ └─wrapper
├─admin
│ ├─admin-ui
│ │ ├─build
│ │ ├─mock
│ │ ├─node
│ │ ├─public
│ │ ├─src
│ │ │ ├─api
│ │ │ ├─assets
│ │ │ │ └─404_images
│ │ │ ├─components
│ │ │ │ ├─Breadcrumb
│ │ │ │ ├─Hamburger
│ │ │ │ ├─Pagination
│ │ │ │ └─SvgIcon
│ │ │ ├─icons
│ │ │ │ └─svg
│ │ │ ├─layout
│ │ │ │ ├─components
│ │ │ │ │ └─Sidebar
│ │ │ │ └─mixin
│ │ │ ├─router
│ │ │ ├─store
│ │ │ │ └─modules
│ │ │ ├─styles
│ │ │ ├─utils
│ │ │ └─views
│ │ │ ├─canalServer
│ │ │ ├─dashboard
│ │ │ ├─login
│ │ │ └─sys
│ │ └─tests
│ │ └─unit
│ │ ├─components
│ │ └─utils
│ └─admin-web
│ ├─src
│ │ ├─main
│ │ │ ├─assembly
│ │ │ ├─bin
│ │ │ ├─java
│ │ │ │ └─com
│ │ │ │ └─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─admin
│ │ │ │ ├─common
│ │ │ │ │ └─exception
│ │ │ │ ├─config
│ │ │ │ ├─connector
│ │ │ │ ├─controller
│ │ │ │ ├─handler
│ │ │ │ ├─model
│ │ │ │ └─service
│ │ │ │ └─impl
│ │ │ └─resources
│ │ │ └─public
│ │ │ └─static
│ │ │ ├─css
│ │ │ ├─fonts
│ │ │ ├─img
│ │ │ └─js
│ │ └─test
│ │ └─java
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─admin
│ └─target
│ ├─classes
│ │ ├─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─admin
│ │ │ ├─common
│ │ │ │ └─exception
│ │ │ ├─config
│ │ │ ├─connector
│ │ │ ├─controller
│ │ │ ├─handler
│ │ │ ├─model
│ │ │ └─service
│ │ │ └─impl
│ │ └─public
│ │ └─static
│ │ ├─css
│ │ ├─fonts
│ │ ├─img
│ │ └─js
│ ├─generated-sources
│ │ └─annotations
│ ├─generated-test-sources
│ │ └─test-annotations
│ └─test-classes
│ └─com
│ └─alibaba
│ └─otter
│ └─canal
│ └─admin
├─client
│ ├─src
│ │ ├─main
│ │ │ └─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─client
│ │ │ ├─impl
│ │ │ │ └─running
│ │ │ ├─kafka
│ │ │ │ └─protocol
│ │ │ ├─pulsarmq
│ │ │ ├─rabbitmq
│ │ │ └─rocketmq
│ │ └─test
│ │ └─java
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─client
│ │ └─running
│ └─target
│ ├─classes
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─client
│ │ ├─impl
│ │ │ └─running
│ │ ├─kafka
│ │ │ └─protocol
│ │ ├─pulsarmq
│ │ ├─rabbitmq
│ │ └─rocketmq
│ ├─generated-sources
│ │ └─annotations
│ ├─generated-test-sources
│ │ └─test-annotations
│ └─test-classes
│ └─com
│ └─alibaba
│ └─otter
│ └─canal
│ └─client
│ └─running
├─client-adapter
│ ├─common
│ │ ├─src
│ │ │ ├─main
│ │ │ │ └─java
│ │ │ │ └─com
│ │ │ │ └─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─client
│ │ │ │ └─adapter
│ │ │ │ └─support
│ │ │ └─test
│ │ │ └─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─client
│ │ │ └─adapter
│ │ │ └─support
│ │ └─target
│ │ ├─classes
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─client
│ │ │ └─adapter
│ │ │ └─support
│ │ ├─generated-sources
│ │ │ └─annotations
│ │ ├─generated-test-sources
│ │ │ └─test-annotations
│ │ └─test-classes
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─client
│ │ └─adapter
│ │ └─support
│ ├─es6x
│ │ ├─src
│ │ │ ├─main
│ │ │ │ ├─java
│ │ │ │ │ ├─com
│ │ │ │ │ │ └─alibaba
│ │ │ │ │ │ └─otter
│ │ │ │ │ │ └─canal
│ │ │ │ │ │ └─client
│ │ │ │ │ │ └─adapter
│ │ │ │ │ │ └─es6x
│ │ │ │ │ │ ├─etl
│ │ │ │ │ │ └─support
│ │ │ │ │ └─org
│ │ │ │ │ └─elasticsearch
│ │ │ │ │ └─client
│ │ │ │ └─resources
│ │ │ │ ├─es6
│ │ │ │ └─META-INF
│ │ │ │ └─canal
│ │ │ └─test
│ │ │ ├─java
│ │ │ │ └─com
│ │ │ │ └─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─client
│ │ │ │ └─adapter
│ │ │ │ └─es6x
│ │ │ │ └─test
│ │ │ │ └─sync
│ │ │ └─resources
│ │ │ └─es6
│ │ └─target
│ │ ├─classes
│ │ │ ├─com
│ │ │ │ └─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─client
│ │ │ │ └─adapter
│ │ │ │ └─es6x
│ │ │ │ ├─etl
│ │ │ │ └─support
│ │ │ ├─es6
│ │ │ ├─META-INF
│ │ │ │ └─canal
│ │ │ └─org
│ │ │ └─elasticsearch
│ │ │ └─client
│ │ ├─generated-sources
│ │ │ └─annotations
│ │ ├─generated-test-sources
│ │ │ └─test-annotations
│ │ └─test-classes
│ │ ├─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─client
│ │ │ └─adapter
│ │ │ └─es6x
│ │ │ └─test
│ │ │ └─sync
│ │ └─es6
│ ├─es7x
│ │ ├─src
│ │ │ ├─main
│ │ │ │ ├─java
│ │ │ │ │ └─com
│ │ │ │ │ └─alibaba
│ │ │ │ │ └─otter
│ │ │ │ │ └─canal
│ │ │ │ │ └─client
│ │ │ │ │ └─adapter
│ │ │ │ │ └─es7x
│ │ │ │ │ ├─etl
│ │ │ │ │ └─support
│ │ │ │ └─resources
│ │ │ │ ├─es7
│ │ │ │ └─META-INF
│ │ │ │ └─canal
│ │ │ └─test
│ │ │ └─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─client
│ │ │ └─adapter
│ │ │ └─es7x
│ │ │ └─test
│ │ └─target
│ │ ├─classes
│ │ │ ├─com
│ │ │ │ └─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─client
│ │ │ │ └─adapter
│ │ │ │ └─es7x
│ │ │ │ ├─etl
│ │ │ │ └─support
│ │ │ ├─es7
│ │ │ └─META-INF
│ │ │ └─canal
│ │ ├─generated-sources
│ │ │ └─annotations
│ │ ├─generated-test-sources
│ │ │ └─test-annotations
│ │ └─test-classes
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─client
│ │ └─adapter
│ │ └─es7x
│ │ └─test
│ ├─escore
│ │ ├─src
│ │ │ └─main
│ │ │ └─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─client
│ │ │ └─adapter
│ │ │ └─es
│ │ │ └─core
│ │ │ ├─config
│ │ │ ├─monitor
│ │ │ ├─service
│ │ │ └─support
│ │ └─target
│ │ ├─classes
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─client
│ │ │ └─adapter
│ │ │ └─es
│ │ │ └─core
│ │ │ ├─config
│ │ │ ├─monitor
│ │ │ ├─service
│ │ │ └─support
│ │ └─generated-sources
│ │ └─annotations
│ ├─hbase
│ │ ├─src
│ │ │ ├─main
│ │ │ │ ├─java
│ │ │ │ │ └─com
│ │ │ │ │ └─alibaba
│ │ │ │ │ └─otter
│ │ │ │ │ └─canal
│ │ │ │ │ └─client
│ │ │ │ │ └─adapter
│ │ │ │ │ └─hbase
│ │ │ │ │ ├─config
│ │ │ │ │ ├─monitor
│ │ │ │ │ ├─service
│ │ │ │ │ └─support
│ │ │ │ └─resources
│ │ │ │ ├─hbase
│ │ │ │ └─META-INF
│ │ │ │ └─canal
│ │ │ └─test
│ │ │ └─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─client
│ │ │ └─adapter
│ │ │ └─hbase
│ │ │ └─test
│ │ └─target
│ │ ├─classes
│ │ │ ├─com
│ │ │ │ └─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─client
│ │ │ │ └─adapter
│ │ │ │ └─hbase
│ │ │ │ ├─config
│ │ │ │ ├─monitor
│ │ │ │ ├─service
│ │ │ │ └─support
│ │ │ ├─hbase
│ │ │ └─META-INF
│ │ │ └─canal
│ │ ├─generated-sources
│ │ │ └─annotations
│ │ ├─generated-test-sources
│ │ │ └─test-annotations
│ │ └─test-classes
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─client
│ │ └─adapter
│ │ └─hbase
│ │ └─test
│ ├─kudu
│ │ ├─src
│ │ │ ├─main
│ │ │ │ ├─java
│ │ │ │ │ └─com
│ │ │ │ │ └─alibaba
│ │ │ │ │ └─otter
│ │ │ │ │ └─canal
│ │ │ │ │ └─client
│ │ │ │ │ └─adapter
│ │ │ │ │ └─kudu
│ │ │ │ │ ├─config
│ │ │ │ │ ├─monitor
│ │ │ │ │ ├─service
│ │ │ │ │ └─support
│ │ │ │ └─resources
│ │ │ │ ├─kudu
│ │ │ │ └─META-INF.canal
│ │ │ └─test
│ │ │ └─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─client
│ │ │ └─adapter
│ │ │ └─kudu
│ │ │ └─test
│ │ │ └─sync
│ │ └─target
│ │ ├─classes
│ │ │ ├─com
│ │ │ │ └─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─client
│ │ │ │ └─adapter
│ │ │ │ └─kudu
│ │ │ │ ├─config
│ │ │ │ ├─monitor
│ │ │ │ ├─service
│ │ │ │ └─support
│ │ │ ├─kudu
│ │ │ └─META-INF.canal
│ │ ├─generated-sources
│ │ │ └─annotations
│ │ ├─generated-test-sources
│ │ │ └─test-annotations
│ │ └─test-classes
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─client
│ │ └─adapter
│ │ └─kudu
│ │ └─test
│ │ └─sync
│ ├─launcher
│ │ ├─src
│ │ │ └─main
│ │ │ ├─assembly
│ │ │ ├─bin
│ │ │ ├─java
│ │ │ │ └─com
│ │ │ │ └─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─adapter
│ │ │ │ └─launcher
│ │ │ │ ├─common
│ │ │ │ ├─config
│ │ │ │ ├─loader
│ │ │ │ ├─monitor
│ │ │ │ │ └─remote
│ │ │ │ └─rest
│ │ │ └─resources
│ │ │ └─META-INF
│ │ └─target
│ │ ├─classes
│ │ │ ├─com
│ │ │ │ └─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─adapter
│ │ │ │ └─launcher
│ │ │ │ ├─common
│ │ │ │ ├─config
│ │ │ │ ├─loader
│ │ │ │ ├─monitor
│ │ │ │ │ └─remote
│ │ │ │ └─rest
│ │ │ └─META-INF
│ │ └─generated-sources
│ │ └─annotations
│ ├─logger
│ │ ├─src
│ │ │ └─main
│ │ │ ├─java
│ │ │ │ └─com
│ │ │ │ └─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─client
│ │ │ │ └─adapter
│ │ │ │ └─logger
│ │ │ └─resources
│ │ │ └─META-INF
│ │ │ └─canal
│ │ └─target
│ │ ├─classes
│ │ │ ├─com
│ │ │ │ └─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─client
│ │ │ │ └─adapter
│ │ │ │ └─logger
│ │ │ └─META-INF
│ │ │ └─canal
│ │ └─generated-sources
│ │ └─annotations
│ ├─phoenix
│ │ ├─src
│ │ │ ├─main
│ │ │ │ ├─java
│ │ │ │ │ └─com
│ │ │ │ │ └─alibaba
│ │ │ │ │ └─otter
│ │ │ │ │ └─canal
│ │ │ │ │ └─client
│ │ │ │ │ └─adapter
│ │ │ │ │ └─phoenix
│ │ │ │ │ ├─config
│ │ │ │ │ ├─monitor
│ │ │ │ │ ├─service
│ │ │ │ │ └─support
│ │ │ │ └─resources
│ │ │ │ ├─META-INF
│ │ │ │ │ └─canal
│ │ │ │ └─phoenix
│ │ │ └─test
│ │ │ └─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─client
│ │ │ └─adapter
│ │ │ └─phoenix
│ │ │ └─test
│ │ │ └─sync
│ │ └─target
│ │ ├─classes
│ │ │ ├─com
│ │ │ │ └─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─client
│ │ │ │ └─adapter
│ │ │ │ └─phoenix
│ │ │ │ ├─config
│ │ │ │ ├─monitor
│ │ │ │ ├─service
│ │ │ │ └─support
│ │ │ ├─META-INF
│ │ │ │ └─canal
│ │ │ └─phoenix
│ │ ├─generated-sources
│ │ │ └─annotations
│ │ ├─generated-test-sources
│ │ │ └─test-annotations
│ │ └─test-classes
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─client
│ │ └─adapter
│ │ └─phoenix
│ │ └─test
│ │ └─sync
│ ├─rdb
│ │ ├─src
│ │ │ ├─main
│ │ │ │ ├─java
│ │ │ │ │ └─com
│ │ │ │ │ └─alibaba
│ │ │ │ │ └─otter
│ │ │ │ │ └─canal
│ │ │ │ │ └─client
│ │ │ │ │ └─adapter
│ │ │ │ │ └─rdb
│ │ │ │ │ ├─config
│ │ │ │ │ ├─monitor
│ │ │ │ │ ├─service
│ │ │ │ │ └─support
│ │ │ │ └─resources
│ │ │ │ ├─META-INF
│ │ │ │ │ └─canal
│ │ │ │ └─rdb
│ │ │ └─test
│ │ │ ├─java
│ │ │ │ └─com
│ │ │ │ └─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─client
│ │ │ │ └─adapter
│ │ │ │ └─rdb
│ │ │ │ └─test
│ │ │ │ └─sync
│ │ │ └─resources
│ │ │ └─rdb
│ │ └─target
│ │ ├─classes
│ │ │ ├─com
│ │ │ │ └─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─client
│ │ │ │ └─adapter
│ │ │ │ └─rdb
│ │ │ │ ├─config
│ │ │ │ ├─monitor
│ │ │ │ ├─service
│ │ │ │ └─support
│ │ │ ├─META-INF
│ │ │ │ └─canal
│ │ │ └─rdb
│ │ ├─generated-sources
│ │ │ └─annotations
│ │ ├─generated-test-sources
│ │ │ └─test-annotations
│ │ └─test-classes
│ │ ├─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─client
│ │ │ └─adapter
│ │ │ └─rdb
│ │ │ └─test
│ │ │ └─sync
│ │ └─rdb
│ └─tablestore
│ ├─src
│ │ └─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─client
│ │ │ └─adapter
│ │ │ └─tablestore
│ │ │ ├─common
│ │ │ ├─config
│ │ │ ├─enums
│ │ │ ├─service
│ │ │ └─support
│ │ └─resources
│ │ ├─META-INF
│ │ │ └─canal
│ │ └─tablestore
│ └─target
│ ├─classes
│ │ ├─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─client
│ │ │ └─adapter
│ │ │ └─tablestore
│ │ │ ├─common
│ │ │ ├─config
│ │ │ ├─enums
│ │ │ ├─service
│ │ │ └─support
│ │ ├─META-INF
│ │ │ └─canal
│ │ └─tablestore
│ └─generated-sources
│ └─annotations
├─common
│ ├─src
│ │ ├─main
│ │ │ └─java
│ │ │ └─com
│ │ │ ├─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─common
│ │ │ │ ├─alarm
│ │ │ │ ├─utils
│ │ │ │ └─zookeeper
│ │ │ │ └─running
│ │ │ └─google
│ │ │ └─common
│ │ │ └─collect
│ │ └─test
│ │ └─java
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─common
│ │ └─utils
│ └─target
│ ├─classes
│ │ └─com
│ │ ├─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─common
│ │ │ ├─alarm
│ │ │ ├─utils
│ │ │ └─zookeeper
│ │ │ └─running
│ │ └─google
│ │ └─common
│ │ └─collect
│ ├─generated-sources
│ │ └─annotations
│ ├─generated-test-sources
│ │ └─test-annotations
│ └─test-classes
│ └─com
│ └─alibaba
│ └─otter
│ └─canal
│ └─common
│ └─utils
├─connector
│ ├─core
│ │ ├─src
│ │ │ └─main
│ │ │ └─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─connector
│ │ │ └─core
│ │ │ ├─config
│ │ │ ├─consumer
│ │ │ ├─filter
│ │ │ ├─producer
│ │ │ ├─spi
│ │ │ └─util
│ │ └─target
│ │ ├─classes
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─connector
│ │ │ └─core
│ │ │ ├─config
│ │ │ ├─consumer
│ │ │ ├─filter
│ │ │ ├─producer
│ │ │ ├─spi
│ │ │ └─util
│ │ └─generated-sources
│ │ └─annotations
│ ├─kafka-connector
│ │ ├─src
│ │ │ ├─main
│ │ │ │ ├─java
│ │ │ │ │ └─com
│ │ │ │ │ └─alibaba
│ │ │ │ │ └─otter
│ │ │ │ │ └─canal
│ │ │ │ │ └─connector
│ │ │ │ │ └─kafka
│ │ │ │ │ ├─config
│ │ │ │ │ ├─consumer
│ │ │ │ │ └─producer
│ │ │ │ └─resources
│ │ │ │ └─META-INF
│ │ │ │ └─canal
│ │ │ └─test
│ │ │ └─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─connector
│ │ │ └─kafka
│ │ │ └─test
│ │ └─target
│ │ ├─classes
│ │ │ ├─com
│ │ │ │ └─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─connector
│ │ │ │ └─kafka
│ │ │ │ ├─config
│ │ │ │ ├─consumer
│ │ │ │ └─producer
│ │ │ └─META-INF
│ │ │ └─canal
│ │ ├─generated-sources
│ │ │ └─annotations
│ │ ├─generated-test-sources
│ │ │ └─test-annotations
│ │ └─test-classes
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─connector
│ │ └─kafka
│ │ └─test
│ ├─pulsarmq-connector
│ │ ├─src
│ │ │ ├─main
│ │ │ │ ├─java
│ │ │ │ │ └─com
│ │ │ │ │ └─alibaba
│ │ │ │ │ └─otter
│ │ │ │ │ └─canal
│ │ │ │ │ └─connector
│ │ │ │ │ └─pulsarmq
│ │ │ │ │ ├─config
│ │ │ │ │ ├─consumer
│ │ │ │ │ └─producer
│ │ │ │ └─resources
│ │ │ │ └─META-INF
│ │ │ │ └─canal
│ │ │ └─test
│ │ │ └─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─connector
│ │ │ └─pulsarmq
│ │ │ └─consumer
│ │ └─target
│ │ ├─classes
│ │ │ ├─com
│ │ │ │ └─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─connector
│ │ │ │ └─pulsarmq
│ │ │ │ ├─config
│ │ │ │ ├─consumer
│ │ │ │ └─producer
│ │ │ └─META-INF
│ │ │ └─canal
│ │ ├─generated-sources
│ │ │ └─annotations
│ │ ├─generated-test-sources
│ │ │ └─test-annotations
│ │ └─test-classes
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─connector
│ │ └─pulsarmq
│ │ └─consumer
│ ├─rabbitmq-connector
│ │ ├─src
│ │ │ └─main
│ │ │ ├─java
│ │ │ │ └─com
│ │ │ │ └─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─connector
│ │ │ │ └─rabbitmq
│ │ │ │ ├─config
│ │ │ │ ├─consumer
│ │ │ │ └─producer
│ │ │ └─resources
│ │ │ └─META-INF
│ │ │ └─canal
│ │ └─target
│ │ ├─classes
│ │ │ ├─com
│ │ │ │ └─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─connector
│ │ │ │ └─rabbitmq
│ │ │ │ ├─config
│ │ │ │ ├─consumer
│ │ │ │ └─producer
│ │ │ └─META-INF
│ │ │ └─canal
│ │ └─generated-sources
│ │ └─annotations
│ ├─rocketmq-connector
│ │ ├─src
│ │ │ └─main
│ │ │ ├─java
│ │ │ │ └─com
│ │ │ │ └─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─connector
│ │ │ │ └─rocketmq
│ │ │ │ ├─config
│ │ │ │ ├─consumer
│ │ │ │ └─producer
│ │ │ └─resources
│ │ │ └─META-INF
│ │ │ └─canal
│ │ └─target
│ │ ├─classes
│ │ │ ├─com
│ │ │ │ └─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─connector
│ │ │ │ └─rocketmq
│ │ │ │ ├─config
│ │ │ │ ├─consumer
│ │ │ │ └─producer
│ │ │ └─META-INF
│ │ │ └─canal
│ │ └─generated-sources
│ │ └─annotations
│ └─tcp-connector
│ ├─src
│ │ └─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─connector
│ │ │ └─tcp
│ │ │ ├─config
│ │ │ └─consumer
│ │ └─resources
│ │ └─META-INF
│ │ └─canal
│ └─target
│ ├─classes
│ │ ├─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─connector
│ │ │ └─tcp
│ │ │ ├─config
│ │ │ └─consumer
│ │ └─META-INF
│ │ └─canal
│ └─generated-sources
│ └─annotations
├─dbsync
│ ├─src
│ │ ├─main
│ │ │ └─java
│ │ │ └─com
│ │ │ └─taobao
│ │ │ └─tddl
│ │ │ └─dbsync
│ │ │ └─binlog
│ │ │ ├─event
│ │ │ │ └─mariadb
│ │ │ └─exception
│ │ └─test
│ │ ├─java
│ │ │ └─com
│ │ │ └─taobao
│ │ │ └─tddl
│ │ │ └─dbsync
│ │ │ └─binlog
│ │ │ └─event
│ │ └─resources
│ │ └─binlog
│ └─target
│ ├─classes
│ │ └─com
│ │ └─taobao
│ │ └─tddl
│ │ └─dbsync
│ │ └─binlog
│ │ ├─event
│ │ │ └─mariadb
│ │ └─exception
│ ├─generated-sources
│ │ └─annotations
│ ├─generated-test-sources
│ │ └─test-annotations
│ └─test-classes
│ ├─binlog
│ └─com
│ └─taobao
│ └─tddl
│ └─dbsync
│ └─binlog
│ └─event
├─deployer
│ ├─src
│ │ └─main
│ │ ├─assembly
│ │ ├─bin
│ │ ├─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─deployer
│ │ │ ├─admin
│ │ │ └─monitor
│ │ └─resources
│ │ ├─example
│ │ ├─metrics
│ │ └─spring
│ │ └─tsdb
│ │ ├─sql
│ │ └─sql-map
│ └─target
│ ├─classes
│ │ ├─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─deployer
│ │ │ ├─admin
│ │ │ └─monitor
│ │ ├─example
│ │ ├─metrics
│ │ └─spring
│ │ └─tsdb
│ │ ├─sql
│ │ └─sql-map
│ └─generated-sources
│ └─annotations
├─docker
│ ├─base
│ │ └─yum
│ └─image
│ ├─admin
│ │ └─bin
│ └─alidata
│ ├─bin
│ ├─init
│ └─lib
├─driver
│ ├─src
│ │ ├─main
│ │ │ └─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─parse
│ │ │ └─driver
│ │ │ └─mysql
│ │ │ ├─packets
│ │ │ │ ├─client
│ │ │ │ └─server
│ │ │ ├─socket
│ │ │ └─utils
│ │ └─test
│ │ └─java
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─parse
│ │ └─driver
│ │ └─mysql
│ │ ├─packets
│ │ │ └─client
│ │ └─utils
│ └─target
│ ├─classes
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─parse
│ │ └─driver
│ │ └─mysql
│ │ ├─packets
│ │ │ ├─client
│ │ │ └─server
│ │ ├─socket
│ │ └─utils
│ ├─generated-sources
│ │ └─annotations
│ ├─generated-test-sources
│ │ └─test-annotations
│ └─test-classes
│ └─com
│ └─alibaba
│ └─otter
│ └─canal
│ └─parse
│ └─driver
│ └─mysql
│ ├─packets
│ │ └─client
│ └─utils
├─example
│ ├─src
│ │ └─main
│ │ ├─assembly
│ │ ├─bin
│ │ ├─conf
│ │ ├─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─example
│ │ │ ├─kafka
│ │ │ └─rocketmq
│ │ └─resources
│ └─target
│ ├─classes
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─example
│ │ ├─kafka
│ │ └─rocketmq
│ └─generated-sources
│ └─annotations
├─filter
│ ├─src
│ │ ├─main
│ │ │ └─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─filter
│ │ │ ├─aviater
│ │ │ └─exception
│ │ └─test
│ │ └─java
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─filter
│ └─target
│ ├─classes
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─filter
│ │ ├─aviater
│ │ └─exception
│ ├─generated-sources
│ │ └─annotations
│ ├─generated-test-sources
│ │ └─test-annotations
│ └─test-classes
│ └─com
│ └─alibaba
│ └─otter
│ └─canal
│ └─filter
├─images
├─instance
│ ├─core
│ │ ├─src
│ │ │ └─main
│ │ │ └─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─instance
│ │ │ └─core
│ │ └─target
│ │ ├─classes
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─instance
│ │ │ └─core
│ │ └─generated-sources
│ │ └─annotations
│ ├─manager
│ │ ├─src
│ │ │ ├─main
│ │ │ │ └─java
│ │ │ │ └─com
│ │ │ │ └─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─instance
│ │ │ │ └─manager
│ │ │ │ ├─model
│ │ │ │ └─plain
│ │ │ └─test
│ │ │ └─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─instance
│ │ │ └─manager
│ │ └─target
│ │ ├─classes
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─instance
│ │ │ └─manager
│ │ │ ├─model
│ │ │ └─plain
│ │ ├─generated-sources
│ │ │ └─annotations
│ │ ├─generated-test-sources
│ │ │ └─test-annotations
│ │ └─test-classes
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─instance
│ │ └─manager
│ └─spring
│ ├─src
│ │ ├─main
│ │ │ └─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─instance
│ │ │ └─spring
│ │ │ └─support
│ │ └─test
│ │ ├─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─instance
│ │ │ └─spring
│ │ │ └─integrated
│ │ └─resources
│ │ ├─retl
│ │ └─spring
│ └─target
│ ├─classes
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─instance
│ │ └─spring
│ │ └─support
│ ├─generated-sources
│ │ └─annotations
│ ├─generated-test-sources
│ │ └─test-annotations
│ └─test-classes
│ ├─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─instance
│ │ └─spring
│ │ └─integrated
│ ├─retl
│ └─spring
├─meta
│ ├─src
│ │ ├─main
│ │ │ └─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─meta
│ │ │ └─exception
│ │ └─test
│ │ └─java
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─meta
│ └─target
│ ├─classes
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─meta
│ │ └─exception
│ ├─generated-sources
│ │ └─annotations
│ ├─generated-test-sources
│ │ └─test-annotations
│ └─test-classes
│ └─com
│ └─alibaba
│ └─otter
│ └─canal
│ └─meta
├─parse
│ ├─src
│ │ ├─main
│ │ │ ├─java
│ │ │ │ └─com
│ │ │ │ └─alibaba
│ │ │ │ └─otter
│ │ │ │ └─canal
│ │ │ │ └─parse
│ │ │ │ ├─exception
│ │ │ │ ├─ha
│ │ │ │ ├─inbound
│ │ │ │ │ ├─group
│ │ │ │ │ └─mysql
│ │ │ │ │ ├─dbsync
│ │ │ │ │ ├─ddl
│ │ │ │ │ ├─local
│ │ │ │ │ ├─rds
│ │ │ │ │ │ ├─data
│ │ │ │ │ │ └─request
│ │ │ │ │ └─tsdb
│ │ │ │ │ └─dao
│ │ │ │ ├─index
│ │ │ │ └─support
│ │ │ └─resources
│ │ │ └─ddl
│ │ │ ├─derby
│ │ │ ├─h2
│ │ │ └─mysql
│ │ └─test
│ │ ├─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─parse
│ │ │ ├─helper
│ │ │ ├─inbound
│ │ │ │ ├─group
│ │ │ │ └─mysql
│ │ │ │ ├─ddl
│ │ │ │ └─tsdb
│ │ │ ├─index
│ │ │ └─stub
│ │ └─resources
│ │ ├─binlog
│ │ │ └─tsdb
│ │ ├─ddl
│ │ │ ├─alter
│ │ │ └─table
│ │ └─tsdb
│ │ └─sql-map
│ └─target
│ ├─classes
│ │ ├─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─parse
│ │ │ ├─exception
│ │ │ ├─ha
│ │ │ ├─inbound
│ │ │ │ ├─group
│ │ │ │ └─mysql
│ │ │ │ ├─dbsync
│ │ │ │ ├─ddl
│ │ │ │ ├─local
│ │ │ │ ├─rds
│ │ │ │ │ ├─data
│ │ │ │ │ └─request
│ │ │ │ └─tsdb
│ │ │ │ └─dao
│ │ │ ├─index
│ │ │ └─support
│ │ └─ddl
│ │ ├─derby
│ │ ├─h2
│ │ └─mysql
│ ├─generated-sources
│ │ └─annotations
│ ├─generated-test-sources
│ │ └─test-annotations
│ └─test-classes
│ ├─binlog
│ │ └─tsdb
│ ├─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─parse
│ │ ├─helper
│ │ ├─inbound
│ │ │ ├─group
│ │ │ └─mysql
│ │ │ ├─ddl
│ │ │ └─tsdb
│ │ ├─index
│ │ └─stub
│ ├─ddl
│ │ ├─alter
│ │ └─table
│ └─tsdb
│ └─sql-map
├─prometheus
│ ├─src
│ │ └─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─prometheus
│ │ │ └─impl
│ │ └─resources
│ │ └─META-INF
│ │ └─services
│ └─target
│ ├─classes
│ │ ├─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─prometheus
│ │ │ └─impl
│ │ └─META-INF
│ │ └─services
│ └─generated-sources
│ └─annotations
├─protocol
│ ├─src
│ │ ├─main
│ │ │ └─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─protocol
│ │ │ ├─exception
│ │ │ └─position
│ │ └─test
│ │ └─java
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─protocol
│ └─target
│ ├─classes
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─protocol
│ │ ├─exception
│ │ └─position
│ ├─generated-sources
│ │ └─annotations
│ ├─generated-test-sources
│ │ └─test-annotations
│ └─test-classes
│ └─com
│ └─alibaba
│ └─otter
│ └─canal
│ └─protocol
├─server
│ ├─src
│ │ ├─main
│ │ │ └─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ ├─admin
│ │ │ │ ├─handler
│ │ │ │ └─netty
│ │ │ ├─server
│ │ │ │ ├─embedded
│ │ │ │ ├─exception
│ │ │ │ └─netty
│ │ │ │ ├─handler
│ │ │ │ └─listener
│ │ │ └─spi
│ │ └─test
│ │ └─java
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─server
│ │ └─embedded
│ └─target
│ ├─classes
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ ├─admin
│ │ │ ├─handler
│ │ │ └─netty
│ │ ├─server
│ │ │ ├─embedded
│ │ │ ├─exception
│ │ │ └─netty
│ │ │ ├─handler
│ │ │ └─listener
│ │ └─spi
│ ├─generated-sources
│ │ └─annotations
│ ├─generated-test-sources
│ │ └─test-annotations
│ └─test-classes
│ └─com
│ └─alibaba
│ └─otter
│ └─canal
│ └─server
│ └─embedded
├─sink
│ ├─src
│ │ ├─main
│ │ │ └─java
│ │ │ └─com
│ │ │ └─alibaba
│ │ │ └─otter
│ │ │ └─canal
│ │ │ └─sink
│ │ │ ├─entry
│ │ │ │ └─group
│ │ │ └─exception
│ │ └─test
│ │ └─java
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─sink
│ │ └─stub
│ └─target
│ ├─classes
│ │ └─com
│ │ └─alibaba
│ │ └─otter
│ │ └─canal
│ │ └─sink
│ │ ├─entry
│ │ │ └─group
│ │ └─exception
│ ├─generated-sources
│ │ └─annotations
│ ├─generated-test-sources
│ │ └─test-annotations
│ └─test-classes
│ └─com
│ └─alibaba
│ └─otter
│ └─canal
│ └─sink
│ └─stub
└─store├─src│ ├─main│ │ └─java│ │ └─com│ │ └─alibaba│ │ └─otter│ │ └─canal│ │ └─store│ │ ├─helper│ │ ├─memory│ │ └─model│ └─test│ └─java│ └─com│ └─alibaba│ └─otter│ └─canal│ └─store│ └─memory│ └─buffer└─target├─classes│ └─com│ └─alibaba│ └─otter│ └─canal│ └─store│ ├─helper│ ├─memory│ └─model├─generated-sources│ └─annotations├─generated-test-sources│ └─test-annotations└─test-classes└─com└─alibaba└─otter└─canal└─store└─memory└─buffer