数据同步这点事

最近一段时间,在做数据ETL相关的事,结合实践以及自己的思考,记录下来,以做参考。

 

概述

 一般来说,数据团队自己是很少生产数据的,一般都是对业务线的数据进行分析加工,从而让数据产生价值。一方面,业务线的数据会存到关系数据(如mysql),磁盘(日志)等存储介质;另一方面,基于大数据的分析一般会将数据存储到hdfs,hbase,es。因此,不可避免地我们需要在这些不同的存储介质间同步数据。
从同步时效性来说,可以分为离线同步和实时同步。离线同步,相当于某个时候对源数据做一个快照。而实时同步,一般是通过监控源数据变更操作,通过在目标端实时重放操作,从而达到实时同步的目的(如通过Binlog,EditLog)。

离线同步

 离线数据同步目前已经有开源的实现,比较流行的主要是sqoop和datax,关于她们的历史,这里不做介绍。本文主要说一下使用sqoop和datax以及自研的一些实践。

背景

组里最原始的数据同步主要由以下部分组成:
1,用sqoop从mysql导入到hdfs。
2,用自研的工具从hdfs导出到mysql(至于为什么不用sqoop?主要是导出需要做一些ETL处理,sqoop不能满足需求)。
3,另一套自研的工具从分库mysql导出到hbase。
通过这个三个独立的系统,基本能够满足日常的数据同步需求。但是存在一些问题:
a, 工具太分散,好几套独立的系统不太好维护。
b, 扩展性很差,当初设计时,没有考虑考虑扩展性,字眼的系统嵌入到了调度系统,很难抽象出来,作为独立的服务。
c, 服务服务:告警监控不完善等。

 

改造

随着处理数据量以及任务的越来越大,越来越多,针对以上问题,决定基于开源的datax做深度定制。从而将数据同步服务统一起来。主要的改造点如下:
1,将导入导出服务统一到datax,包括对失败任务重试,删除增量删除等。
2,监控指标和日志统一接入数据平台。
3,数据质量处理:脏数据告警,默认的类型转换。
4,schema检验等。

实时同步

目标

实现可配置实时同步

设计

输入和输出变化很大,但是实时数据同步的核心却只有两个问题:
a, 数据不能丢失
b, 对数据乱序进行处理,不能出现旧的数据把新的数据覆盖了

设计思路主要基于以下两点:
1,针对不通的输入和输出,则必须和核心的处理单元进行解耦,因此源端和目标端因不同的系统,差异很大,所以提供各自的实现。但是必须通过定义好的接口和消息格式,实现统一。
2,核心处理引擎,主要基于storm,然后通过外部存储系统来保存中间状态。

小结

总的来说,基于datax改造还是蛮顺利的,简单有效。而基于实时同步系统的设计,可以说也借助了离线同步系统的开源设计思想,通过source和sink分离,核心引擎共享的设计来实现。目前两套系统已经成功上线,并且效果不错。

 

转载于:https://www.cnblogs.com/superhedantou/p/6832340.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux下的awk程序在哪里编写,如何编写awk命令和脚本

awk命令是处理或分析文本文件(尤其是按行和列组织的数据文件)的强大方法.您可以从命令行运行简单的awk命令. 应该将更复杂的任务作为awk程序(所谓的awk脚本)写入文件.awk命令的基本格式如下:awkpattern {action}输入文件>输出文件这意味着: 占用输入文件的每一行&#xff1b…

TreeSet类的排序

TreeSet支持两种排序方法:自然排序和定制排序。TreeSet默认采用自然排序。 1、自然排序 TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间大小关系,然后将集合元素按升序排列,这种方式就是自然排序。(比较的前提&…

linux边看系统信息,Linux查看系统信息大全[备忘]

系统# uname -a # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue # 查看操作系统版本# cat /proc/cpuinfo # 查看CPU信息# hostname # 查看计算机名# lspci -tv # 列出所有PCI设备# lsusb -tv # 列出所有USB设备# lsmod # 列出加载的内核模块# env # 查看环境变量资源# fre…

关于存储的基本知识:

flash:Flash,是内存(Memory)的一种,但兼有RAM和ROM, 分为NOR Flash 和 NADN Flash两种不同的flash,分别用在不同的场合,不同于SRAM(EEPROM),FLASH的操作是靠一系列指令完成,以扇区sector进行整体…

移植linux内核-映像文件,移植Linux内核-映像文件

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://tigerwang202.blogbus.com/logs/43927976.html首先从Blackfin uClinux网站下载最新版uClinux内核。http://blackfin.uclinux.org/gf/project/uclinux-dist/frs/上述地址除了提供内核源代码外…

linux意想不到题4

101 linux系统调优 答:(1)硬件:大内存、固态硬盘或者RAID阵列、CPU核数、服务器产商 (2)某个服务的编译安装,启用或禁用的一些选项 (3)服务的配置文件,参数的…

linux中用截取一些信息,Linux如何使用cut命令截取文件信息

在Linux众多命令中,cut命令可用来截取文件信息,截取Linux字符串,下面将针对cut命令的用法做个详细介绍,感兴趣的朋友可以来学习下。cut命令有截取的意思,可从linux文件或者标准输入中读取内容并纵向截取所需信息列的一…

l启动进程 linux,《日子》. linux 查看进程启动路径

在linux下查看进程大家都会想到用 ps -ef|grep XXX可是看到的不是全路径,怎么看全路径呢?每个进程启动之后在 /proc下面有一个于pid对应的路径例如:ps -ef|grep python显示:oracle 4431 4366 0 18:56 pts/2 00:00:00 python Serve…

django_4:数据库1——django操作数据库

创建数据库记录(插入) 使用python3 manage.py shell(python3亲测好使) ipython3 manage.py shell(亲测不好使) 方式一、 [rootcentos7 csvt03]# python3 manage.py shell Python 3.5.2 (default, May 9 2017, 23:04:15) Type copyright, credits or li…

linux uuid错误,Linux 错误:fatal error: uuid/uuid.h: No such file or directory

重新configure 后,出现别的错误:fatal error: uuid/uuid.h: No such file or directory这是因为没有uuid库和头文件,需要安装e2fsprogs,试过yum命令安装,问题没解决,需要从源码编译wget http://downloads.sourceforge.…

uva 11054

据说这叫扫描法,,,,感觉就是脑洞啊,,,,,反正从最左端开始,如果有酒就往后运,需要酒就运负的,就是相当于后面有酒了就运回来。。。 #in…

fastdfs集群搭建2

五.在各个存储节点安装nginx 1.上传 fastdfs-nginx-module_v1.16.tar.gz 到/usr/local/src,解压 2.修改 fastdfs-nginx-module 的 config 配置文件 将CORE_INCS"$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/" 修改为:CORE_INC…

201521123057 《Java程序设计》第12周学习总结

1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容。 2. 书面作业 1.字符流与文本文件:使用 PrintWriter(写),BufferedReader(读) 将Student对象(属性:int id, String name,int age,doub…

linux 管道文件上机总结,[转载]LINUX 管道 fifo 等总结

Linux进程通信:命名管道FIFO小结Linux下进程之间通信可以用命名管道FIFO完成。命名管道是一种特殊类型的文件,因为Linux中所有事物都是文件,它在文件系统中以文件名的形式存在。在程序中,我们可以使用两个不同的函数调用来建立管道…

tomcat 下载

点project 关闭防火墙才可以让别人访问自己 转载于:https://www.cnblogs.com/feathe/p/6853491.html

linux消息框架,远程处理器消息框架 - 基于Linux 简化 AMP 配置使其更方便更动态地分配资源...

核心的 rpmsg 框架起到开关的作用,根据消息中包含的目的地址将消息传送到相应端点。由于消息报头包含源地址,因此可在不同处理器之间建立专用连接。命名服务处理器可通过向 rpmsg 框架的命名服务发送消息,以动态宣布特定服务。命名服务功能本…

洛谷 P3366 【模板】最小生成树

题目描述 如题&#xff0c;给出一个无向图&#xff0c;求出最小生成树&#xff0c;如果该图不连通&#xff0c;则输出orz 输入输出格式 输入格式&#xff1a;第一行包含两个整数N、M&#xff0c;表示该图共有N个结点和M条无向边。&#xff08;N<5000&#xff0c;M<200000…

陇东学院c语言程序设计,C语言程序设计

spContent《C语言程序设计》是高等学校本科教育普遍开设的一门课程&#xff0c;是广大程序设计语言学习者首选的入门课程。本课程立足于C语言基础知识的讲解&#xff0c;讲授中引入大量实例&#xff0c;突出重点&#xff0c;剖析难点&#xff0c;培养学生结构化程序设计的思想&…

关于android:windowNoTitle不起作用的解决办法

今天测试一个新功能的时候&#xff0c;在styles.xml设置<item name"android:windowNoTitle">true</item>并没有生效&#xff0c;当时很奇怪&#xff0c;以前的项目都这么设置的&#xff0c;并且都能生效&#xff0c;后来发现MainActivity继承的是AppComp…

jQuery笔记——选择器

jQuery 最核心的组成部分就是&#xff1a;选择器引擎。它继承了 CSS 的语法&#xff0c;可以对 DOM 元 素的标签名、属性名、状态等进行快速准确的选择&#xff0c;并且不必担心浏览器的兼容性 常规选择器 根据id选择元素就是使用#&#xff0c;还有两种其他选择元素的方式&…