方案一、定时任务同步
定时任务同步就是在某个时间点进行数据的批量同步,以定时任务方式进行触发,定时任务技术有:SpringTask,Quartz,XXLJOB,实时性不高
不足:不实时
方案二、通过MQ实现同步
在数据库中执行完增加、修改、删除操作后,向MQ中发送一条消息,此时,同步程序作为MQ中的消费者,从消息队列中获取消息,然后执行同步的逻辑。
优点:能够做到准实时
不足:代码耦合
方案三、通过CDC实现实时同步
通过CDC来解析数据库的日志信息,来检测数据库中表结构和数据的变化,从而实时同步。
优点:准实时、解耦
组件:cannal、Mysql-Streamer 、Debezium、datax
1)DataX datax 是阿里开源的etl 工具,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能,采用java+python进行开发,核心是java语言实现。
github地址:https://github.com/alibaba/DataX
2)OGG OGG 一般主要用于Oracle数据库。即Oracle GoldenGate是Oracle的同步工具 ,可以实现两个Oracle数据库之间的数据的同步,也可以实现Oracle数据同步到Kafka,相关的配置操作可以参考如下:
https://blog.csdn.net/dkl12/article/details/80447154 https://www.jianshu.com/p/446ed2f267fa http://blog.itpub.net/15412087/viewspace-2154644/
3)databus Databus是一个实时的、可靠的、支持事务的、保持一致性的数据变更抓取系统。2011年在LinkedIn正式进入生产系统,2013年开源。
Databus通过挖掘数据库日志的方式,将数据库变更实时、可靠的从数据库拉取出来,业务可以通过定制化client实时获取变更。
Databus的传输层端到端延迟是微秒级的,每台服务器每秒可以处理数千次数据吞吐变更事件,同时还支持无限回溯能力和丰富的变更订阅功能。
github:https://github.com/linkedin/databus
4)gobblin Gobblin是用来整合各种数据源的通用型ETL框架,在某种意义上,各种数据都可以在这里“一站式”的解决ETL整个过程,专为大数据采集而生,易于操作和监控,提供流式抽取支持。主要用于Kafka的数据同步到HDFS。
总结:
- databus活跃度不高,datax和canal 相对比较活跃。
- datax 一般比较适合于全量数据同步,对全量数据同步效率很高(任务可以拆分,并发同步,所以效率高),对于增量数据同步支持的不太好(可以依靠时间戳+定时调度来实现,但是不能做到实时,延迟较大)。
- canal 、databus 等由于是通过日志抓取的方式进行同步,所以对增量同步支持的比较好。
- 以上这些工具都缺少一个监控和任务配置调度管理的平台来进行支撑。
相关参考: https://zhuanlan.zhihu.com/p/374548575 https://blog.csdn.net/a934079371/article/details/106184493 https://zhuanlan.zhihu.com/p/586451027