canal的执行原理


CanalInstanceWithSpring

实例


canal server架构
canal server架构

  • server 代表一个 canal 运行实例,对应于一个 jvm
  • instance 对应于一个数据队列 (1个 canal server 对应 1…n 个 instance )
  • instance 下的子模块
    eventParser: 数据源接入,模拟 slave 协议和 master 进行交互,协议解析
    eventSink: Parser 和 Store 链接器,进行数据过滤,加工,分发的工作
    eventStore: 数据存储
    metaManager: 增量订阅 & 消费信息管理器

instance配置

eventParser

AbstractEventParser.start()

dump binlog
start方法中调用 dump()方法dump mysql的binlog日志(tcp)

sinkHandler.sink()

sink
注意区别这里的sinkHandler和eventSink

EventTransactionBuffer.flush()

匿名flush方法

eventSink

EntryEventSink.doSink()

ventSink put到eventStore
consumeTheEventAndProfilingIfNecessary(transaction)会调用eventSink.sink()

eventStore

doput
eventStore是用内存基于ringBuffer实现队列的生产/消费存储

CanalServerWithNetty

start
CanalLauncher的start最后会调用CanalServerWithNetty的start启动一个netty服务端,并注册一个SessionHandler
GET
sessionHandler会处理客户端发送的GET事件,然后通过getWithoutAck从eventStore获取binlog(上面eventSink写入到eventStore)
eventStore.get

客户端

start
客户端启动根据SPI机制启动对应的adapter
process
canalMsgConsumer有对应的四个实现,这里已TCP协议对接,使用CanalTCPConsumer

getMessage
向服务端发送get事件
向上面服务端启动的netty服务发送get事件获取binlog
同步数据到adapter
往上数第三张截图里面getMessage之后有调用writerOut
同步数据到es
这里以esadapter为例,最后调用esSyncService.sync同步数据到es
细节不看了,只讲主体流程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值