基于canal实现的数据报送系统实现

基于canal实现的数据报送系统

场景

最近做的一个项目要求像三方平台实时报送数据,因为以后对接的三方平台可能会很多,所以想在对原系统的业务没有侵入的情况下完成数据的推送

当时第一想法再写一个数据传输系统连接业务数据库通过定时的方式不断抓取新数据,但是这样的问题是数据不具备实时性,并且增加了业务数据库的压力

又不想在原数据库上直接操作,那只有依赖于mysql主从复制的机制,对比了一些现有的开源项目,最后还是选择了阿里的 canal

在这里插入图片描述

MySQL主备复制原理

在这里插入图片描述

  • MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)
  • MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)
  • MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据

canal 工作原理

  • canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
  • MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
    canal 解析 binary log 对象(原始为 byte 流)*

整体的架构图

在这里插入图片描述

  • mysql 就是业务数据库 也是数据源

  • canal 用于实时同步数据

  • mq 用来保证即使下游处理失败数据也不丢失,而且可以控制多表的插入顺序( 因为当数据跨多张表时需要保证数据的完整性,下文中的事件发布时基于单表的(insert 、 update)产生的,可以使用延时队列保证数据的问整形 )

  • 通讯平台负责数据传输

核心功能大概下面这几个
在这里插入图片描述
监听队列信息 -> sql生成-> 数据持久化 -> 事件发布 -> 具体的观察者处理数据->日志记录->数据传输->日志记录

现存的问题:

mysql 的主从复制是基于行的导致数据库字段改动时需要两个数据库同时更改

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

1999

每人一点点,明天会更好

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

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

打赏作者

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

抵扣说明:

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

余额充值