SpringBoot使用canal实现数据同步增量

canal简介

canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)。

canal 就是一个同步增量数据的一个工具

canal应用场景

基于日志增量订阅和消费的业务包括

  • 数据库镜像
  • 数据库实时备份
  • 索引构建和实时维护(拆分异构索引、倒排索引等)
  • 业务 cache 刷新
  • 带业务逻辑的增量数据处理

当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x

  1. 将用户的订单信息传入后台。
  2.  后台服务器将订单信息保存到mysql数据库。
  3. 由 canal 进行监控mysql中的写操作变化,将发生修改(Insert) 的数据写入到kafka
  4. 通过sparkStreaming读取Kafka中的数据,进行计算。
  5. 将计算好的结果,重新写如到服务器中,并返回到浏览器

canal 除了写入kafka 还能将数据写入到其他中间件(mysql、elasticsearch、hbase等)

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 流)
canal 就像是一名"间谍",它伪装成了一个从机(slave),从主机(master)中骗取数据。拿到数据之后,再对数据进行解析,比如·只要新增的数据或者删除或修改的数据,并将数据重新进行包装,将数据重新写入到第三方服务中(mysql、Kafka、es等)。

SpringBoot使用canal

 

posted @ 2022-05-03 09:00  残城碎梦  阅读(1167)  评论(0编辑  收藏  举报