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
单线程从源库
DumpBinlog:
Write_rows、Delete_rows、Update_rows- 解析
Binlog,结合源库表结构,构造msg,提交给Scheduler
3)Scheduler
根据
msg的库、表、主键hash,将msg路由至指定的队列
4)Output
从对应的 执行队列中 获取
msg,根据msg的情况进行合并操作:⬤ 对于单表连续批量的
insertmsg,会合成一条SQL:insertintotablevalues(),(),();⬤ 全量阶段,为批量的
Insert数据,所以合并率较高;⬤ 增量阶段,不同表的
insert、update、delete操作混合在一起,整体合并率较低(单线程操作,保证顺序)


