# data_sync **Repository Path**: bboymars/data_sync ## Basic Information - **Project Name**: data_sync - **Description**: # data_sync 基于Debezium实现数据同步 - **Primary Language**: Unknown - **License**: AFL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2023-02-20 - **Last Updated**: 2024-12-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # data_sync #### 介绍 #### data_sync 基于Debezium实现数据同步,源库Mysql -> MQ -> Mysql(支持多个业务端) #### 软件架构 方案架构 ![方案架构](asura-ops-sync/doc/img/%E6%9E%B6%E6%9E%84.png) 系统交互 ![系统交互](asura-ops-sync/doc/img/%E7%B3%BB%E7%BB%9F%E4%BA%A4%E4%BA%92.png) 架构说明 1、采用采集数据,接收数据两端分离; 2、采用MQ进行数据收发解耦; 3、服务端Server以嵌套Debezium方式进行监听Binlog; 4、客户端提供SDK方式接入业务端; 架构优势 1、支持同步源端DDL而不影响下游业务系统; 2、业务系统接入便利; 3、保证数据可靠性; 4、支持1比N; 5、支持数据丢失补偿; 6、支持源、目标库之间数据一致性对比; #### 项目模块说明 1、asura-ops-sync-server 服务进程,监听数据源服务 2、asura-ops-sync-api 接口模块,提供手动启动,暂停,补偿等功能 3、asura-ops-sync-client 模拟业务端服务,接收消息并逻辑处理 4、asura-ops-sync-sdk 客户端SDK,方便业务端快速接入 5、asura-ops-sync-check-server 数据对比程序,监控源数据和目标数据的一致性 #### 安装教程 ##### 监听服务 1. 执行数据库结构初始化脚本doc/sql/asura_sync.sql, 添加需要被监听的数据库信息(涉及表cfg_db,cfg_server,cfg_table,cfg_server_db,cfg_mq); 2. 修改asura-ops-sync-server配置信息(apollo.config)并启动; ##### 业务端SDK接入 1、新建client同步应用 2、引入依赖 com.asura asura-ops-sync-sdk 0.0.2-SNAPSHOT 3、配置多数据源 ops.target.dataSourceProperties[0].url = jdbc:mysql://test.db8-01-asura.ruigushop.com:3306/asura_wms_004?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true ops.target.dataSourceProperties[0].username = asura ops.target.dataSourceProperties[0].password = asura ops.target.dataSourceProperties[0].type = com.alibaba.druid.pool.DruidDataSource ops.target.dataSourceProperties[1].url = jdbc:mysql://test.db8-01-asura.ruigushop.com:3306/asura_wms_005?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true ops.target.dataSourceProperties[1].username = asura ops.target.dataSourceProperties[1].password = asura ops.target.dataSourceProperties[1].type = com.alibaba.druid.pool.DruidDataSource 3、新建个类实现AbstractSyncHandler接口 @Slf4j @Component public class IBSSyncHandler extends AbstractSyncHandler { @Resource private DataSourceConfig dataSourceConfig; @PostConstruct public void init() { Map maps = Maps.newConcurrentMap(); maps.put("mdm_sku", SkuEntity.class); maps.put("mdm_sku_packing_define", MdmSkuPackingDefineEntity.class); this.configTableEntityClassMap(maps); this.configDatasourceList(dataSourceConfig.dataSourceList()); } } 4、数据配置参考 DataSourceConfig @Component @Data @ConfigurationProperties(prefix = "ops.target") public class DataSourceConfig { private List dataSourceProperties; public List dataSourceList() { List dataSourceList = Lists.newArrayList(); for (DataSourceProperties properties : dataSourceProperties) { DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); dataSource.setDriverClassName(properties.getDriverClassName()); dataSource.setUrl(properties.getUrl()); dataSource.setUsername(properties.getUsername()); dataSource.setPassword(properties.getPassword()); dataSource.setValidationQuery("SELECT 1");//用来检测连接是否有效 dataSource.setTestOnBorrow(false); dataSource.setTestOnReturn(false); dataSource.setTestWhileIdle(true); dataSource.setTimeBetweenEvictionRunsMillis(600000); dataSource.setMaxActive(20); dataSource.setInitialSize(10); dataSourceList.add(dataSource); } return dataSourceList; } } 5、把要同步的表的实体copy到应用中,比如SkuEntity,MdmSkuPackingDefineEntity 类