

MySQL master启动binlog机制,将数据变更写入二进制日志(binary log, 其中记录叫做二进制日志事件binary log events,可以通过show binlog events进行查看) MySQL slave(I/O thread)将master的binary log events拷贝到它的中继日志(relay log) MySQL slave(SQL thread)重放relay log中事件,将数据变更反映它自己的数据中
Canal模拟MySQL slave的交互协议,伪装自己为MySQL slave,向MySQL master发送dump协议 MySQL master收到dump请求,开始推送binary log给slave(也就是canal) Canal解析binary log对象(原始为byte流)



Connection获取上一次解析成功的log position(如果是第一次启动,则获取初始指定的位置或者是当前数据库的binlog log position) Connection建立连接,向MySQL master发送BINLOG_DUMP请求 MySQL开始推送binary Log接收到的binary Log 通过BinlogParser进行协议解析,补充一些特定信息。如补充字段名字、字段类型、主键信息、unsigned类型处理等 将解析后的数据传入到EventSink组件进行数据存储(这是一个阻塞操作,直到存储成功) 定时记录binary Log位置,以便重启后继续进行增量订阅

数据1:n业务
RingBuffer设计:


put/get/ack cursor用于递增,采用long型存储。三者之间的关系为put>=get>=ack buffer的get操作,通过取余或者&操作。(&操作:cusor & (size - 1) , size需要为2的指数,效率比较高)

manager方式:和你自己的内部web console/manager系统进行对接。(目前主要是公司内部使用)


EntryHeaderlogfileName [binlog文件名]logfileOffset [binlog position]executeTime [binlog里记录变更发生的时间戳]schemaName [数据库实例]tableName [表名]eventType [insert/update/delete类型]entryType [事务头BEGIN/事务尾END/数据ROWDATA]storeValue [byte数据,可展开,对应的类型为RowChange]RowChangeisDdl [是否是ddl变更操作,比如create table/drop table]sql [具体的ddl sql]rowDatas [具体insert/update/delete的变更数据,可为多条,1个binlog event事件可对应多条变更,比如批处理]beforeColumns [Column类型的数组]afterColumns [Column类型的数组]Columnindex [column序号]sqlType [jdbc type]name [column name]isKey [是否为主键]updated [是否发生过变更]isNull [值是否为null]value [具体的内容,注意为文本]
1.可以提供数据库变更前和变更后的字段内容,针对binlog中没有的name、isKey等信息进行补全
2.可以提供ddl的变更语句
Canal HA机制:
Canal的HA实现机制是依赖zookeeper实现的,主要分为Canal server和Canal client的HA。
Canal server:为了减少对MySQL dump的请求,不同server上的instance要求同一时间只能有一个处于running状态,其他的处于standby状态。
Canal Server HA架构图:

Canal server要启动某个Canal instance时都先向Zookeeper进行一次尝试启动判断 (实现:创建EPHEMERAL节点,谁创建成功就允许谁启动) 创建Zookeeper节点成功后,对应的Canal server就启动对应的Canal instance,没有创建成功的Canal instance就会处于standby状态 一旦Zookeeper发现Canal server A创建的节点消失后,立即通知其他的Canal server再次进行步骤1的操作,重新选出一个Canal server启动instance Canal client每次进行connect时,会首先向Zookeeper询问当前是谁启动了Canal instance,然后和其建立链接,一旦链接不可用,会重新尝试connect
Maxwell主要提供了下列功能:
支持SELECT * FROM table的方式进行全量数据初始化 支持在主库发生failover后,自动恢复binlog位置(GTID) 可以对数据进行分区,解决数据倾斜问题,发送到Kafka的数据支持库、表、列等级别的数据分区 工作方式是伪装为slave,接收binlog events,然后根据schema信息拼装,可以接受ddl、xid、row等event

推荐文章:
技术点记录
Scala中的IO操作及ArrayBuffer线程安全问题
内存泄露、内存溢出和堆外内存,JVM优化参数
HBase中Memstore存在的意义以及多列族引起的问题和设计
Kafka高性能揭秘
笔试编程 | 二分查找、数组、排序
Hive Join优化
对Spark硬件配置的建议
面试 | redis中的哈希问题
Java并发队列与容器
不可不知的资源管理调度器Hadoop Yarn
HDFS重要技术点
详解Spark算子

文章转载自大数据学习与分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




