DTS数据传输
前言
Github:https://github.com/HealerJean
一、数据传输-同步原理
1、整体流程
源库 ->
Input
(生产者)-》Scheduler
(队列)-》Output
(消费者)-》目标库
| 信息 | 说明 |
| ——————- | ———————————————————— |
| Input
(生产者) | ` Input 用来适配各种数据源(
MySQL、
PG、
Mongo) |
|
Scheduler(队列) |
Scheduler 用来对
Input 生成的数据流调度,发送至指定的队列 |
|
Output(消费者) |
Output 读取队列中的将数据并写入目标端,比如
Kafka,
MySQL` |
2、详细流程
1)全量阶段 Input
多线程并发去源库批量获取数据,全量阶段的时候需要记录
binlog
位点,用于增量阶段:⬤ 并发的粒度:表级别
⬤ 单次获取 1w 行数据
⬤ 根据主键/唯一键记录获取数据的位置;若没有主键,执行整表查询
2)增量阶段 Input
单线程从源库
Dump
Binlog
:
Write_rows
、Delete_rows
、Update_rows
- 解析
Binlog
,结合源库表结构,构造msg
,提交给Scheduler
3)Scheduler
根据
msg
的库、表、主键hash
,将msg
路由至指定的队列
4)Output
从对应的 执行队列中 获取
msg
,根据msg
的情况进行合并操作:⬤ 对于单表连续批量的
insert
msg
,会合成一条SQL:insert
into
table
values
(),(),();⬤ 全量阶段,为批量的
Insert
数据,所以合并率较高;⬤ 增量阶段,不同表的
insert
、update
、delete
操作混合在一起,整体合并率较低(单线程操作,保证顺序)