Alibaba Canal 数据同步中间件

1、bat和sh文件区别

  A. .bat是在window系统上执行的批处理文件,批处理文件的扩展名是.bat或.cmd,启动该文件可以在cmd命令提示符下输入文件的名称,也可以双击该文件;

  B. .sh是在Linux系统上执行的批处理文件,启动该文件可以在目录下输入./fileName.sh,也可以sh fileName.sh。

 2、canal简单介绍

  介绍canal之前,先说一下trigger触发器,我曾经做过一个主从节点,分省建设项目,需要把管理节点的数据同步到业务节点,就是采用trigger触发器做的client-server模式组件,后来发现很多问题,例如服务器时间不一致同步有问题、并发情况下触发器偶尔不工作等,后来项目重构采用了业务节点存放数据,管理节点汇聚数据,多数据源来解决的,节点读写分离就是采用canal解决的。

  A. canal作为MySQL binlog增量获取和解析工具,采用了client-server模式,首先启动server端,再运行client端,server端直接下载使用,client端可采用不同的语言实现不同的消费逻辑;

  B. 基于日志的增量订阅和消费的业务:数据库镜像、数据库实时备份、索引构建和实时维护、业务cache刷新、带业务逻辑的增量处理;

  C. canal和MySQL主从复制的工作原理比较:

  D. client的maven依赖:

<dependency>
    <groupId>com.alibaba.otter</groupId>
    <artifactId>canal.client</artifactId>
    <version>1.1.3</version>
</dependency>

  E. server启动配置:普通快速启动、docker模式快速启动、kafka/rocket快速启动等;

  F、client适配elasticsearch、redis等。

3. canal client数据对象(EntryProtocol.proto)格式含义:

Entry
header
version 协议的版本号,默认1
logfileName binlog的文件名
logfileOffset binlog position
serverId 服务端serverId
serverenCode 变更数据的编码 
executeTime 变更数据的执行时间
sourceType 变更数据的来源,默认MySQL
schemaName 变更数据的数据库名
tableName 变更数据的表名
eventType insert/update/delete类型,默认update
eventLength 每个event的长度
props 预留扩展
gtid 当前事务的gtid
entryType  事务头begin/事务尾end/数据rowdata
storeValue  byte数据,对应的类型RowChange
RowChange  
tableId 由数据库产生
eventType 数据变更类型,默认update
isDdl 标识是否是ddl语句,比如create table/drop table
sql ddl/query的语句
rowDatas
beforeColums 字段信息,增量数据(修改前,删除前),Column类型的数组
afterColumns 字段信息,增量数据(修改后,新增后),Column类型的数组
props 预留扩展
ddlSchemaName ddl/quey的schemaName,会存在跨库ddl,需要保留ddl执行的当前schemaName
props 预留扩展
Column  
index 字段下标
sqlType jdbc type
name 字段名称,忽略大小写
isKey 是否为主键
updated 是否发生过变更
isNull 值是否为null
value 字段值,timestamp/dateTime是一个时间格式的文本,其余为string
length 对应数据对象原始长度
mysqlType 字段mysql类型

   注意:insert只有afterColumns,delete只有beforeColumns,而update有afterColumns和beforeColumns两个数据

 

  可参考canal中间件官网地址

      canal介绍

      canal服务端配置及代码详细配置

      canal client API介绍

https://www.cnblogs.com/javazhiyin/p/10836846.html

https://shift-alt-ctrl.iteye.com/blog/2399603

 

posted @   如幻行云  阅读(1027)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示