数据迁移方案对比
方案列表
迁移方案 | 实时性 | 优点 | 缺点 | 同步方式 | 常用场景 | 使用方式 | 使用难度 |
---|---|---|---|---|---|---|---|
Flume | 准实时 | 支持分布式集群部署 2、支持场景多样 3、数据源形式多样 4、支持自定义开发,易扩展 | 配置繁琐 | 增量 | 1.文件/文件夹采集 2.端口采集等 | 1、编写配置文件,启动程序即可。 官方文档:http://flume.apache.org/releases/content/1.9.0/FlumeUserGuide.html | 一般 |
Kettle | 离线 | 1、支持数据源种类多 2、独立部署 3、可进行数据清洗转换 4、数据流向清晰 | 单机执行,同步效率低 | 全量 增量(定时任务+脚本 | etl场景 | 界面化操作,编写指定的数据源跟写入目的地即可。官网:http://www.kettle.net.cn/ | 简单 |
DataX | 离线 | 1、数据抽取性能高 2、独立部署 3、支持数据源种类多 4、开发快速 | 增量同步实现麻烦 | 全量 增量(定时任务+脚本) | 数据库 | 1、 编写配置文件,启动程序即可。 2、 增量同步需编写自定义脚本或程序。 官方文档:https://github.com/alibaba/DataX | 一般 |
Canal | 实时 | 1、mysql数据库实时数据同步,对数据库无访问压力 | 只支持msyql数据库,数据落地方式较少 | 增量 | 对mysql数据更新进行实时同步 | 1、 对指定同步的mysql需更改配置文件为指定要求; 2、 修改canal程序的相应配置文件。 文档地址:https://github.com/alibaba/canal | 难 |
Sqoop | 离线 | 1、数据吞吐量大 2、部署需依赖大数据集群 3、支持数据源较为单一 | 操作复杂 | 全量 增量(定时任务+脚本) | 与大数据集群直接通信的关系数据库间的大批量数据传输 | 编写抽取的执行命令脚本即可,参数较多,注意各个参数含义 官方文档:http://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html | 一般 |
Debezium | 实时 | 1、数据实时同步,对数据库无压力 2、支持数据源较多 | 一般结合kafka使用,不能直接使数据到目标库 | 增量 | 数据同步至kafka,供其他程序消费 | 编写配置文件即可 https://debezium.io/documentation/reference/1.4/tutorial.html | 一般 |
擅长场景
flume:
1、实时快速采集数据,且没有业务逻辑耦合的场景,常用于日志文本类采集,或端口类数据采集;
2、支持将数据写入kafka、hdfs、hbase、hive、es等大数据场景,通常应用于大数据场景,扩展方便,可集群和分布式部署;
3、通常与kafka搭配使用;
4、官方配置示例详细,可实现快速的数据采集程序部署。无需开发代码。
Kettle:
1、界面操作,开发快速,操作简单,易学习。
2、适用于场景多变,且要求快速实现的项目。
3、较适合培训运维人员操作,对数据库到库任务可快速实现
DataX:
1、配置文件编写简单,适用于数据库/文本类的数据抽取;
2、抽取效率较高,但会受单机性能影响;
3、学习简单,适合快速开发,只需要修改配置文件,运行简单;
4、对增量抽取需自己编写脚本或程序实现。
Canal:
1、适用于项目级开发,canal不影响数据库的业务使用,不会带来数据库查询压力;
2、适用于对数据同步实时性要求高的项目,通常需要开发额外的数据解析逻辑。
Sqoop:
1、只适合用于大数据场景的批量导数,使用场景较为局限。
Debezium :
1、适用于对实时性要求较高项目;
2、关注每条数据的变化,对数据库没有访问压力;
使用建议:
1、对于需要实时采集的项目,可优先考虑flume进行采集。支持采集方式较多,对数据落地的方案也多,可满足大多数实时采集数据的应用场景,对不满足的情况也支持自定义开发source和sink。
2、对于大批量数据的导入,可优先考虑dataX进行数据抽取,抽数效率较高,配置文件简单,可较快实现项目项目要求。配置文件+执行脚本+定时任务,可满足大多数数据抽取的应用场景。
3、对于数据实时性要求交高的,不影响业务数据库的,建议使用Debezium 同步数据,数据实时同步到kafka,可供其他有需求的地方共同使用。另可结合flink使用,达到数据实时处理计算。