数据同步中间件DBSyncer
1. 数据同步概述
在常见的业务开发场景中数据迁移,增量或者全量数据同步,在迁移或者同步过程中还会涉及到字段映射,默认值,还有可能存在不同数据库之间数据迁移,mysql,Oracle,SQLServer,ES,Kafka等等很多场景,虽然使用频率有限,但是场景很多,所以推荐几款数据同步开源组件DBSyncer,DataX,本文主要介绍DBSyncer使用及问题。
DataX链接
datax-web链接
DBSyncer链接
2. DBSyncer介绍
DBSyncer是一款开源的数据同步中间件,提供Mysql、Oracle、SqlServer、Elasticsearch(ES)、SQL(Mysql/Oracle/SqlServer)等同步场景。支持上传插件自定义同步转换业务,提供监控全量和增量数据统计图、应用性能预警等。
3. DBSyncer特点
1.组合驱动,自定义库同步到库组合,关系型数据库与非关系型之间组合,任意搭配表同步映射关系。
2.实时监控,驱动全量或增量实时同步运行状态、结果、同步日志和系统日志。
3.开发插件,自定义转化同步逻辑
4. DBSyncer应用场景
连接器 | 数据源 | 目标源 | 支持版本(包含以下) |
---|---|---|---|
Mysql | ✔️ | ✔️ | 5.7.19以上 |
Oracle | ✔️ | ✔️ | 10g以上 |
SqlServer | ✔️ | ✔️ | 2008以上 |
ES | ✔️ | ✔️ | 6.X以上 |
SQL | ✔️ | ||
最近计划 kafka(设计中)、Redis |
5. DBSyncer安装配置
5.1 创建项目
配置步骤
1.安装JDK 1.8(省略详细)
2.下载安装包DBSyncer-1.0.0-Beta.zip(也可手动编译)
3.解压安装包,Window执行bin/startup.bat,Linux执行bin/startup.sh
4.打开浏览器访问:http://127.0.0.1:18686
5.账号和密码:admin/admin
其实没那么麻烦,直接通过idea从gitee上拉去代码,找到dbsyncer-web中Application启动完成,按照上述访问地址,用户名与密码访问。
启动完成状态
5.2 自定义插件
创建插件
对应项目:dbsyncer-plugin
创建路径:CrmCustomerConvertServiceImpl
org.dbsyncer.plugin.service.CrmCustomerConvertServiceImpl
package org.dbsyncer.plugin.service;
import org.dbsyncer.common.spi.ConvertService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
/**
* Demo class
*
* @author zrj
* @date 2021/10/31
*/
@Component
public class CrmCustomerConvertServiceImpl implements ConvertService {
private final Logger logger = LoggerFactory.getLogger(getClass());
/**
* 版本号
*/
@Value(value = "${info.app.version}")
private String version;
@Override
public void convert(List<Map> source, List<Map> target) {
logger.info("CRM客户插件正在处理同步数据");
logger.info("CRM客户插件正在处理同步数据,源头数据:{}", source);
logger.info("CRM客户插件正在处理同步数据,目标数据:{}", target);
target.forEach(map -> {
map.put("update_id", "20211119001");
map.put("create_id", "20211119002");
map.put("create_name", "dbsyncer01");
map.put("update_name", "dbsyncer02");
//map.put("deleted", false);
});
logger.info("CRM客户插件正在处理同步数据,调整数据:{}", target);
}
@Override
public void convert(String event, Map source, Map target) {
logger.info("CRM客户插件正在处理同步数据,事件:{},数据:{}", event, source);
}
@Override
public String getVersion() {
return "1.1.0-Beta";
}
@Override
public String getName() {
return "CrmCustomer";
}
}
配置插件
驱动管理-配置驱动-高级配置-插件配置:选择插件
5.3 配置页面
1.驱动管理
驱动管理分两块
添加连接:配置数据源,包括源数据库与目标数据库。
添加驱动:配置的是数据迁移时的数据库信息,过滤映射信息,以及插件中自定义的迁移时逻辑处理。
2.监控页面
监控页面分三块
应用性能:CPU,内存等机器应用参数。
查询数据:执行sql的成功失败记录。
查询日志:数据源配置操作日志。
3.定义插件
插件有什么用?
插件是一种可扩展全量同步和增量同步实现数据转换的技术方式。通过插件可以接收同步数据,自定义同步到目标源的行数据,也能消费数据并实现更多业务场景。
4.参数配置
参数配置包括两块
系统参数:刷新频率。
修改密码:登录密码修改。
6. DBSyncer实现验证
启动执行
完成状态
6. DBSyncer存在问题
MySQL字段类型tinyint转换为null,这个需要手动处理。