首页 > 其他分享 >大数据常用数据同步工具

大数据常用数据同步工具

时间:2022-10-09 10:47:42浏览次数:66  
标签:canal 常用 同步 数据库 全量 数据 otter

背景

如果公司要搞数据平台,首当其冲的是把旧库的数据导入到新库中,原本各种数据库大部分都提供了导入导出的工具,但是数据存储到(mongdb,hbase,mysql,oracle)等多种不同的数据库,同步起来头都大,这时候就可以用到一些数据同步工具了。

离线导入导出

DataX

阿里的Datax是比较优秀的产品,基于python,提供各种数据村塾的读写插件,多线程执行,使用起来也很简单,定义好配置json文件执行脚本就可以了,非常适合离线数据,增量数据可以使用一些编码的方式实现,但是也仅仅针对insert数据比较有效,update数据就不适合。

github地址:https://github.com/alibaba/DataX

Sqoop

Sqoop是针对大数据而生的,专注于Hadoop(Hive)与传统的数据库数据的传递,是Hadoop生态的一员。在数据库的支持的丰富性上不如DataX,但是如果你用hadoop,用sqoop是更好的选择,因为做Apache的顶级项目,他背后的支持远远比阿里一家公司靠谱的多。

官网地址:http://sqoop.apache.org/

Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

Kettle

Kettle作为传统ETL工具,目前也都已经有了nosql数据库的支持,而且kettle还有图形界面可以用,使用起来简单多了。而且本来就是专门做ETL的,是Pentaho指定的ETL组件,对于数据清洗等处理数据的环节支持更好。但是数据效率一般,而且在生产环境也很少弄台windows机器,适合小项目,数据量比较小的同步。

Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,数据抽取高效稳定。
Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。


实时同步

实时同步最灵活的还是用kafka做中间转发,当数据发生变化时,记录变化到kafka,需要同步数据的程序订阅消息即可,需要研发编码支持。这里说个mysql数据库的同步组件,阿里的canal和otter

canal

canal是基于mysql的binlog进行数据同步的中间件。简单来说,Canal 会将自己伪装成 MySQL 从节点(Slave),并从主节点(Master)获取 Binlog,解析和贮存后供下游消费端使用。Canal 包含两个组成部分:服务端和客户端。服务端负责连接至不同的 MySQL 实例,并为每个实例维护一个事件消息队列;客户端则可以订阅这些队列中的数据变更事件,处理并存储到数据仓库中。

github地址:https://github.com/alibaba/canal

使用的话,安装好canal,配置好数据库参数,再编写一个客户端消费canal传过来的数据就可以了。详情查看官网。

otter

github地址:https://github.com/alibaba/otter

otter是在canal基础上又重新实现了可配置的消费者,使用otter的话,刚才说过的消费者就不需要写了,而otter提供了一个web界面,可以自定义同步任务及map表。非常适合mysql库之间的同步。

而且通过retl_buff表的监控,也可以实现一些全量数据的同步。

但是otter也有一些不好的地方,比如界面上的参数并不是所有的都有用,文档写的一般,不是很清晰。但是想想省了好多事,还是非常好的一款中间件。

详细查看官网,安装部署研究下问题不大。

全量与增量

数据同步一般分为两种方式:全量和增量。

全量

全量,这个很好理解。就是每天定时(避开业务高峰期)或者周期性全量把数据从一个地方拷贝到另外一个地方;

全量的话,可以采用直接全部覆盖(使用“新”数据覆盖“旧”数据);或者走更新逻辑(覆盖前判断下,如果新旧不一致,就更新);

这里面有一个隐藏的问题:如果采用异步写,主数据物理删除了,怎么直接通过全量数据同步?这就需要借助一些中间操作日志文件,或者其他手段,把这些“看不到”的数据记录起来。

增量

增量,就是指抓取某个时刻(更新时间)或者检查点(checkpoint)以后的数据来同步,不是无规律的全量同步。

这里引入一个关键性的前提:副本一端要记录或者知道(通过查询更新日志或者订阅更新)哪些更新了。

标签:canal,常用,同步,数据库,全量,数据,otter
From: https://www.cnblogs.com/zhaojinhui/p/16771302.html

相关文章

  • 数据结构 3 栈和队列
    栈和队列也算是数据类型。以为都是在首位操作,栈和队列克服了线性表添加删除需要移动大量元素的弱点。栈仅在尾部进行插入和删除,尾部叫做栈顶,表头叫做栈底。后进先出。......
  • PHP 常用函数
    时间http://php.net/manual/zh/ref.datetime.phpdate_default_timezone_get()—取得一个脚本中所有日期时间函数所使用的默认时区date_default_timezone_set()—设定用......
  • 数据库基础-事务
    事物的简介事务是一组操作的集合,它是一个不可分割的工作单位(具有原子性),事务会把所有的操作作为一个整体向系统提交或撤回操作请求,即这些事务中的任意一环节操作失败均会使......
  • 第二章:数据类型、运算符和表达式
    目录​​一、在屏幕上输出英文短句“Programmingisfun.”。​​​​ 二、输入半径,分别计算球体积和球表面积。​​​​ 三、转义字符使用示例。​​​​ 四:利用符号常......
  • 闪存——磨损均衡、垃圾回收、数据压缩、纠错编码
    1.闪存如图所示,闪存由多个颗粒(Die)组成,每个颗粒由多个分组(Plane)组成,每个分组由多个块(Block)组成,每个块由多个页(Page)组成。块是擦除的基本单位。页是读写的基本单位。当一个......
  • 使用sharding做分库分表,使用jpa,发生的save不报错,数据库缺插不进去数据的问题
     先讲讲问题的诞生,我们项目起初没有引进 sharding分库,而是在项目上线前,才做的分库分表。也就是之前的业务都写好的,所以知道业务代码没有任何问题。 然后引入 sharding......
  • db2 数据库与表空间备份与恢复
    一、数据库与表空间备份1、备份语法2、详解database-alias指定要备份的数据库的别名username/usingpassword指定备份数据库所使用的用户和用户密码DBPARTITIONNUMdb-parti......
  • 【博学谷学习记录】超强总结,用心分享|Java基础分享-数据结构(数组、链表)
    目录1.数组2.链表2.1.链表简介2.2.链表分类2.2.1.单链表2.2.2.循环链表2.2.3.双向链表2.2.4.双向循环链表1.数组数组(Array) 是一种很常见的数据结构。......
  • 界面组件DevExpress WinForms v22.1 - 数据可视化功能全新升级
    DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office......
  • json文本数据
    本文主要针对三个问题:json格式数据,text数据与json数据之间的关系,json和python字典的区别1、什么是json数据?json是文本数据,可以在网络中传输的通用数据,它是具有特定格......