利用OTTER实现准实时ETL、数据同步

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 利用OTTER实现高效、复杂、实时性高的数据同步场景;数据同步模式涵盖1源表->1目标表、N源表(在/不在同一实例)->1目标表、1源表->N目标表(在/不在同一实例)、自定义同步

一:背景
目前公司已有的IT系统中,各系统中的数据往往都各自存储,各自定义。每个系统的数据同公司内部的其他数据进行连接互动时,难度很大,无形中加大了跨系统数据合作的沟通成本。为解决这一问题,需要引入一个基础中间件,可以灵活提取源数据库增量信息,按业务需求灵活整合目标表信息,从而使业务系统在本地库实时、准确地访问到其需要的全面业务数据。
二:简介
OTTER是阿里巴巴公司为了解决杭州/美国机房数据间同步研发的一个开源软件。OTTER基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库,是一个分布式数据库同步系统。

工作原理图:

concept_jpeg

原理描述:

  1. 基于Canal开源产品,获取数据库增量日志数据。
  2. 典型管理系统架构,manager(web管理)+node(工作节点)

    1. manager运行时推送同步配置到node节点
    2. node节点将同步状态反馈到manager上
  3. 基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.具体请参考:https://github.com/alibaba/otter/wiki

三:安装
3.1 需要软件
需要MYSQL5.x,manager,node,ZOOKEEPER
3.2 安装步骤
otter的manager、node和ZOOKEEPER均部署在192.168.155.57,otter自身的配置库放在57的MYSQL上
1,安装配置库
用MYSQL命令连接上57后,在提示符下键入 source otter-manager-schema.sql,成功后会建立名为otter的数据库和对应表。
2,安装zookeeper(略)
3,依次安装manager,node(略,详情可参考:https://github.com/alibaba/otter/wiki/QuickStart)
4,验证,输入 http://192.168.155.57:8080/login.htm,输入用户名/密码(admin/admin)登陆后,录入ZK集群信息:
NEW_ZK

四:实战
4.1 表级映射
源表:192.168.155.57上的sbtest1
目标表:192.168.155.60上的sbtest1_1
表差异:无
1)添加数据库
添加源库(57),如图:
NewDataSource

完后后点击 ‘验证连接数据源’,提示‘恭喜,数据库通过验证’,标志源数据库添加成功
添加目标库(60),如图:
NewDestDataSource
同上
2)添加CANAL(监听57DB BINLOG变化)
57Canal

3)添加表
源表:
57_sbtest1

SCHEMA NAME表示对应DB名称,点击’查找数据源‘选择对应的数据库后,再点击’验证连接表‘、’查询Schema&Test'验证表是否配置成功
L(注意:源表上必须要有PRIMARY KEY!否则OTTER无法正确同步,)
目标表:
60_sbtest1_1

4)添加CHANNEL
57_60CHN

同步一致性选择‘基于当前日志查询’效率较高,‘基于数据库反查’会按PK去源表查询效率较低;
同步模式建议选择列记录模式;

 列模式修改哪些字段就映射更新那些字段,如果目标库不存在该记录且本次操作类型为‘修改’,OTTER会忽略本次更新;
 行记录模式会更新所有映射字段,如果目标库不存在该记录且本次操作类型为‘修改’,OTTER会在目标库执行新增;

是否开启数据一致性:选‘否’,公司数据架构设计不考虑数据多主模式。
5)添加PIPE
57_60PIPE

需要选择SELECT/LOAD机器节点;然后选择一个CANAL(注意:一个CANAL只能和一个CHANNEL关联!)
6)添加映射规则
1to1_1

选择好源表,目标表后,点解‘保存’即可,至此,整个配置过程完成。
7)在CHANNEL管理页面启动
StartChn57

8)测试
在57上执行修改语句:
57_sbtest1_mod

然后在60上执行SELECT语句验证结果
60_sbtest1_1_res

测试通过;

4.2 源表覆盖目标表
源表:192.168.155.57上的sbtest2
目标表:192.168.155.60上的sbtest1_small
表差异:源表笔比目标表多字段
1)添加表
2)在对应的CHANNEL->PIPE上添加映射规则
先配置源表、目标表,然后点击‘下一步’,页面上会显示源表,目标表的字段列表信息
origin_2_small

然后按映射规则拖动对应字段,完后后点’保存‘
2_small

至此,整个配置过程完成。
3)在CHANNEL管理页面启动(略)
4)测试(略)
4.3 源表是目标表一部分
源表:192.168.155.57上的sbtest3
目标表:192.168.155.60上的sbtest3_3
表差异:源表笔比目标表少字段
1)添加表
2)在对应的CHANNEL->PIPE上添加映射规则
3)启动,测试
4.4 多张源表(同实例)覆盖一张目标表
源表:192.168.155.57上的sbtest4/sbtest5
目标表:192.168.155.60上的sbtest45_3
表差异:2源表合并成一张目标表
1)添加表
2)在对应的CHANNEL->PIPE上添加映射规则
3)启动,测试
4.5 多张源表(不同实例)覆盖一张目标表
源表1:192.168.155.57上的sbtest6
源表2:192.168.155.59上的sbtest7
目标表:192.168.155.60上的sbtest67_3
表差异:2源表合并成一张目标表
1)添加新数据源(192.168.155.59)
2)添加表
3)添加CANALE,监听192.168.155.59的BINLOG变化
4)添加新的CHANEL,对应59->60的数据映射
5)在4)生成的CHANNLE中配置新的PIPE
6)在新PIPE中定义映射规则(sbtest7->sbtest67_3)
7)启动,测试
4.6 一张源表覆盖多张目标表(同实例)
源表1:192.168.155.57上的sbtest8
目标表1:192.168.155.60上的sbtest1_from8
目标表2:192.168.155.60上的sbtest2_from8
表差异:1源表拆分成2张目标表
1)添加CANAL,监听192.168.155.57的BINLOG变化
2)添加新的CHANEL,对应sbtest8->sbtest2_from8的数据映射
3)在2)生成的CHANNLE中配置新的PIPE
4)在新PIPE中定义映射规则(sbtest8->sbtest2_from8)
5)启动,测试
4.7 一张源表覆盖多张目标表(不同实例)
源表1:192.168.155.57上的sbtest9
目标表1:192.168.155.59上的sbtest1_from9
目标表2:192.168.155.60上的sbtest2_from9
表差异:1源表拆分成2张目标表
1)添加新的CHANEL,对应57->59的数据映射
3)在2)生成的CHANNLE中配置新的PIPE
4)在新PIPE中定义映射规则(sbtest9->sbtest2_from9)
5)启动,测试
4.8 自定义同步
源表1:192.168.155.57上的sbtest10
目标表:192.168.155.60上的sbtest_misc
目标表2:192.168.155.60上的sbtest2_from8
表差异:目标表比源表多一个CHAR(60)字段,名称叫misc,每次数据发生变化时,固定填入默认值
1)编码,扩展EventProcessor(可参考otter WIKI上例子:https://github.com/alibaba/otter/wiki/Otter%E6%89%A9%E5%B1%95%E6%80%A7
核心代码如下:

    EventColumn misc = new EventColumn();
    misc.setColumnValue("CJN");
    misc.setColumnType(Types.CHAR);
    misc.setColumnName("misc");
    List<EventColumn> cols = eventData.getColumns();
    cols.add(misc);
    eventData.setColumns(cols);

2)配置映射规则
UDF_mapping

选择’clazz'后,在‘EventProcessor文本’填入对应类名,然后将JAR包上传到node/lib下,即可;至此,整个OTTER的功能介绍完毕

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
28天前
|
canal 消息中间件 关系型数据库
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
78 0
|
1月前
|
canal 关系型数据库 MySQL
四种常用的 MySQL 数据同步 ES 的方法
【2月更文挑战第16天】
195 2
四种常用的 MySQL 数据同步 ES 的方法
|
6月前
|
关系型数据库 MySQL Java
对比下 datax 的 OceanBase/MYSQL 不同数据同步方案的效率差异 || 聊聊参数 rewriteBatchedStatements
对比下 datax 的 OceanBase/MYSQL 不同数据同步方案的效率差异 || 聊聊参数 rewriteBatchedStatements
|
3月前
|
缓存 NoSQL 关系型数据库
redis与mysql的数据一致性问题(数据同步延迟)
redis与mysql的数据一致性问题(数据同步延迟)
19 0
|
3月前
|
缓存 NoSQL 关系型数据库
MySQL缓存策略(一致性问题、数据同步以及缓存故障)
MySQL缓存策略(一致性问题、数据同步以及缓存故障)
56 1
|
4月前
|
关系型数据库 MySQL 数据挖掘
一探究竟!RDS MySQL到ClickHouse快速数据同步秘籍
NineData数据复制产品可以轻松解决MySQL到ClickHouse的同步问题,具有强大的数据转换和映射功能、实时同步性能卓越、简单配置操作、可靠的数据一致性、灵活的定制选项、可观测可干预、运行稳定和安全可靠等优点。只需简单三步,即可完成RDS MySQL到云数据库ClickHouse的数据同步。
176 1
|
4月前
|
canal 监控 关系型数据库
【技术选型】Mysql和ES数据同步方案汇总
【技术选型】Mysql和ES数据同步方案汇总
94 0
【技术选型】Mysql和ES数据同步方案汇总
|
9月前
|
canal 搜索推荐 关系型数据库
docker环境安装mysql、canal、elasticsearch,基于binlog利用canal实现mysql的数据同步到elasticsearch中(三)
docker环境安装mysql、canal、elasticsearch,基于binlog利用canal实现mysql的数据同步到elasticsearch中
193 0
|
4月前
|
SQL 关系型数据库 MySQL
这个错误可能是由于Flink CDC在处理MySQL和SQL Server之间的数据同步时遇到了问题
这个错误可能是由于Flink CDC在处理MySQL和SQL Server之间的数据同步时遇到了问题
74 1
|
4月前
|
SQL 关系型数据库 MySQL
MySQL 到 ADB MySQL 实时数据同步实操分享
MySQL 到 ADB MySQL 实时数据同步实操分享
59 0
MySQL 到 ADB MySQL 实时数据同步实操分享