DataX

整体架构

任务拆分

DataX 相关

  • reader/writer 插件模式,job拆分task,task group并行执行
  • split拆分策略,可以自定义,主键根据int 范围做拆分,并行执行
  • ELT架构,transform比较简单,filter,substr,replace,可自定义
  • 目标端需要支持冥等写入,关系和非关系数据库都支持,脏数据控制
  • 增加界面功能,提供界面和REST API调用,增加日志,监控信息
  • 源数据DB,增加源和目标端 流控功能,根据数据量自动拆分

修改的部分

  • 做了HANA的读写插件
  • sqlserver拆分的一个bug
  • 增加了sqlserver的冥等写入
  • transform 增加了一些
  • 动态流控

参考

Canal

说明:

  • server代表一个canal运行实例,对应于一个jvm
  • instance对应于一个数据队列 (1个server对应1..n个instance)

instance模块:

  • eventParser (数据源接入,模拟slave协议和master进行交互,协议解析)
  • eventSink (Parser和Store链接器,进行数据过滤,加工,分发的工作)
  • eventStore (数据存储)
  • metaManager (增量订阅&消费信息管理器)

eventParser

  • 内部又实用了 driver,以及 binlog 解析模块做实际的解析工作

eventSink

  • 内部包含了一个基于 字节码编译的 表达式模块
  • 可以有 1:N,或者 N:1 的设计
  • 在这里做数据加工,根据INSERT、UPDATE、DELETE 做过滤

EventStore

  • 目前仅实现了Memory内存模式,后续计划增加本地file存储,mixed混合模式
  • 借鉴了Disruptor的RingBuffer的实现思路

整体

  • Server 和 Client 模式
  • 也支持嵌入式模式
  • 有一个元数据存储,记录消费的 offset
  • HA 是借助 ZK 的分布式锁,实现主备模式

参考