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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 利用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实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
1月前
|
SQL DataWorks 关系型数据库
DataWorks操作报错合集之如何处理数据同步时(mysql->hive)报:Render instance failed
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
20天前
|
canal 消息中间件 关系型数据库
Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
【9月更文挑战第1天】Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
117 4
|
1月前
|
关系型数据库 MySQL 数据库
【MySQL】手把手教你MySQL数据同步
【MySQL】手把手教你MySQL数据同步
|
1月前
|
SQL 关系型数据库 MySQL
“震撼揭秘!Flink CDC如何轻松实现SQL Server到MySQL的实时数据同步?一招在手,数据无忧!”
【8月更文挑战第7天】随着大数据技术的发展,实时数据同步变得至关重要。Apache Flink作为高性能流处理框架,在实时数据处理领域扮演着核心角色。Flink CDC(Change Data Capture)组件的加入,使得数据同步更为高效。本文介绍如何使用Flink CDC实现从SQL Server到MySQL的实时数据同步,并提供示例代码。首先确保SQL Server启用了CDC功能,接着在Flink环境中引入相关连接器。通过定义源表与目标表,并执行简单的`INSERT INTO SELECT`语句,即可完成数据同步。
116 1
|
1月前
|
SQL canal 关系型数据库
(二十四)全解MySQL之主从篇:死磕主从复制中数据同步原理与优化
兜兜转转,经过《全解MySQL专栏》前面二十多篇的内容讲解后,基本对MySQL单机模式下的各方面进阶知识做了详细阐述,同时在前面的《分库分表概念篇》、《分库分表隐患篇》两章中也首次提到了数据库的一些高可用方案,但前两章大多属于方法论,并未涵盖真正的实操过程。接下来的内容,会以目前这章作为分割点,开启MySQL高可用方案的落地实践分享的新章程!
652 1
|
1月前
|
canal 关系型数据库 MySQL
"揭秘阿里数据同步黑科技Canal:从原理到实战,手把手教你玩转MySQL数据秒级同步,让你的数据处理能力瞬间飙升,成为技术界的新晋网红!"
【8月更文挑战第18天】Canal是一款由阿里巴巴开源的高性能数据同步系统,它通过解析MySQL的增量日志(Binlog),提供低延迟、可靠的数据订阅和消费功能。Canal模拟MySQL Slave与Master间的交互协议来接收并解析Binary Log,支持数据的增量同步。配置简单直观,包括Server和Instance两层配置。在实战中,Canal可用于数据库镜像、实时备份等多种场景,通过集成Canal Client可实现数据的消费和处理,如更新缓存或写入消息队列。
273 0
|
2月前
|
分布式计算 关系型数据库 MySQL
MySQL超时参数优化与DataX高效数据同步实践
通过合理设置MySQL的超时参数,可以有效地提升数据库的稳定性和性能。而DataX作为一种高效的数据同步工具,可以帮助企业轻松实现不同数据源之间的数据迁移。无论是优化MySQL参数还是使用DataX进行数据同步,都需要根据具体的应用场景来进行细致的配置和测试,以达到最佳效果。
|
2月前
|
分布式计算 关系型数据库 MySQL
MaxCompute产品使用合集之用flink mysql的数据同步到mc的Transaction Table2.0,时间会比mysql的时间多8小时,是什么导致的
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
4月前
|
SQL Kubernetes 关系型数据库
实时计算 Flink版产品使用合集之如何实现MySQL单表数据同步到多个表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之使用 MySQL CDC 进行数据同步时,设置 server_id 参数如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

热门文章

最新文章