DataPipeline丨新型企业数据融合平台的探索与实践
文 |刘瀚林 DataPipeline后端研发负责人
交流微信 | datapipeline2018
一、关于数据融合和企业数据融合平台
数据融合是把不同来源、格式、特点性质的数据在逻辑上或物理上有机地集中,从而为企业提供全面的数据共享。
企业数据融合平台,通常的表现形态为运行着大量数据同步和转换任务的分布式系统。其源端一般为各类偏实时的业务数据存储系统,目的端为各类数据仓库/对象存储。
二、企业数据融合平台的典型架构
下图为数据融合平台的典型架构,源端是不同的数据存储系统,另一端是各种类型的数据仓库,关系型数据库或者文件存储等。中间为数据融合平台的简单架构,组件Source connectors负责做数据的采集。
将数据采集之后,会将其做成格式化数据放到Transport Channel,Transport Channel一般会用Source队列或其它流式数据框架,负责做中间的缓存,包括分布式的支持,数据的分发, sink connectors去负责把数据分别写入不同的数据目的地。
三、企业数据融合需要解决的关键问题
1. 数据异构问题
面临繁琐的数据源和目的地适配以及异构数据源的转换问题。
2. 随时变化的数据结构
数据源结构会随时发生变化,造成下游写入失败。当数据结构发生改变时,需要保证数据像正常一样,不会出现任何问题。
3. 数据平台的扩展性
需要根据业务驱动做水平拓展,甚至需应对一对多的分发要求,另外也需要处理和解决多任务并行的QoS。
4. 数据一致性
在任何情况下都需要保证数据是一致的,这也是在生产过程中需要保证的问题。
四、消息队列在数据融合平台的作用
首先是解耦,消息队列可以将源端的数据采集跟移动端的数据完全进行解耦。如果数据写入端出现任何问题,不会影响数据采集的稳定型。
Schema Mapping帮助我们做到了数据源和目的地结构的解耦,减少开发新的connector的复杂度。
同时消息队列提供了水平拓展和高可用的性质,当需要接入更多数据且系统不能支撑时,我们可以轻易的做水平拓展,支持更大的数据量。
另外,对消息队列和数据同步一致性的问题做了保证,至少能保证数据同步的顺序性。
五、DataPipeline现有架构
下图为DataPipeline基于Kafka connect消息队列所做的架构,Kafka本身是一个非常成熟的消息队列,Kafka connect是其下面的一个子项目,相当于给kafka consumer 和 kafka producer提供了一个封装,它实现了分布式和高可用,同时帮助我们负责和kakfa进行交互。
六、Kafka connect-offset管理
消费者会有一个offset的概念,用来记录消费进度,Kafka connect会自动化地做消息offset的管理,它可以等我们消费完一些数据之后,自动提交消费进度,然后在Kafka中做存储。
在读取数据的时候, connector会将数据从数据源抽取出来写到data topic,用来做数据中间的缓存。同时connector在同步过程中也会周期性的将offset提交到offset Topic,相当于每读取一段时间,存一个存档点。
周期性的offset提交如果失败的话,会导致数据任务重启恢复时无法完全恢复到最后写入的offset点。这种情况就会导致数据的重复读取和重复写入,会出现数据一致性的问题,以下解决方案可以从一定程度上避免这个问题:
1. 依赖目的地的特性进行去重达到数据的最终一致性,例如: RDBMS用主键进行去重。
2. 依赖消息队列的事务信息避免源端重复,保证数据写入和offset写入的事务性提交。
3. 目的端在写入后记录单独的offset到redis缓存,并在任务恢复之后根据offset进行过滤,避免重复写入。减少offset rewind带来的数据重复,但是由于写入数据和记录offset并不是事务操作,所以也不保证exactly once delivery。
4. 依赖目的地的事务性,在目的地建立临时空间记录写入的offset,并在任务恢复之后根据offset进行过滤,避免重复写入,可以保证exactly once delivery。但是要求目的地可以支持事务性,并且会在目的地有额外的数据存储。
DataPipeline丨新型企业数据融合平台的探索与实践的更多相关文章
- DataPipeline丨构建实时数据集成平台时,在技术选型上的考量点
文 | 陈肃 DataPipeline CTO 随着企业应用复杂性的上升和微服务架构的流行,数据正变得越来越以应用为中心. 服务之间仅在必要时以接口或者消息队列方式进行数据交互,从而避免了构建单一数 ...
- Tapdata 实时数据融合平台解决方案(一):现代企业数据架构及痛点
作者介绍:TJ,唐建法,Tapdata 钛铂数据 CTO,MongoDB中文社区主席,原MongoDB大中华区首席架构师,极客时间MongoDB视频课程讲师. "怎样可以来搭建一个数据中台? ...
- 搭建企业级实时数据融合平台难吗?Tapdata + ES + MongoDB 就能搞定
摘要:如何打造一套企业级的实时数据融合平台?Tapdata 已经找到了最佳实践,下文将以 Tapdata 的零售行业客户为例,与您分享:基于 ES 和 MongoDB 来快速构建一套企业级的实时数 ...
- Tapdata 实时数据融合平台解决方案(五):落地
作者介绍:TJ,唐建法,Tapdata 钛铂数据 CTO,MongoDB中文社区主席,原MongoDB大中华区首席架构师,极客时间MongoDB视频课程讲师. 通过前面几篇文章,我们从企业数据整合与分 ...
- Tapdata 实时数据融合平台解决方案(四):技术选型
作者介绍:TJ,唐建法,Tapdata 钛铂数据CTO,MongoDB中文社区主席,原MongoDB大中华区首席架构师,极客时间MongoDB视频课程讲师. 常见搭建数据中台的技术产品 数据中台包括: ...
- Tapdata 实时数据融合平台解决方案(二):理解数据中台
作者介绍:TJ,唐建法,Tapdata 钛铂数据 CTO,MongoDB中文社区主席,原MongoDB大中华区首席架构师,极客时间MongoDB视频课程讲师. 数据中台定义: 以打通部门或数据孤岛的统 ...
- Tapdata 实时数据融合平台解决方案(三):数据中台的技术需求
作者介绍:TJ,唐建法,Tapdata 钛铂数据 CTO,MongoDB中文社区主席,原MongoDB大中华区 首席架构师,极客时间MongoDB视频课程讲师. 我们讲完了这个中台的一个架构和它的逻 ...
- 公有云上构建云原生 AI 平台的探索与实践 - GOTC 技术论坛分享回顾
7 月 9 日,GOTC 2021 全球开源技术峰会上海站与 WAIC 世界人工智能大会共同举办,峰会聚焦 AI 与云原生两大以开源驱动的前沿技术领域,邀请国家级研究机构与顶级互联网公司的一线技术专家 ...
- DataPipeline CTO陈肃:构建批流一体数据融合平台的一致性语义保证
文 | 陈肃 DataPipelineCTO 交流微信 | datapipeline2018 本文完整PPT获取 | 关注公众号后,后台回复“陈肃” 首先,本文将从数据融合角度,谈一下DataPipe ...
随机推荐
- JaveScript基础(2)之数据类型转换和常用字符串的操作方法
1.JaveScript数据类型转换: A.转字符串:通过"+"或toString(); PS:如果都是数值类型,'+'会进行求和运算,否则会做字符串连接: var s=2.5;d ...
- 【转】高效利用Fundebug追踪Node.js日志发现问题
不管使用哪个语言做项目开发,我们都会自觉地用日志来做相关记录.比如,HTTP请求,报错信息.某些关键节点埋点记录等等.在Java中有大名鼎鼎的Log4J,于是在Node.js中也有了log4js. 日 ...
- eclipse 创建maven web示例
注意,以下所有需要建立在你的eclipse等已经集成配置好了maven了,没有的话需要安装maven. 一.创建项目 1.新建maven项目,如果不在上面,请到other里面去找一下 一直点击下一步, ...
- Netty中的EventLoop和线程模型
一.前言 在学习了ChannelHandler和ChannelPipeline的有关细节后,接着学习Netty的EventLoop和线程模型. 二.EventLoop和线程模型 2.1. 线程模型 线 ...
- Oracle-12:伪列rowid和rownum
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 伪列:不真实存储在真表中,但是我们可以查询到不能对伪列进行增删改操作! 分页可以用rownum来分!!!!!! ...
- ORACLE 快速启动监听及相关服务程序
windows7 系统下,鼠标移至任务栏右键启动任务管理器->选择服务->点击右下角服务选项 ->选中名称,键盘输入O(大写),快速找到ORACLE相关服务进程 ->将所有的O ...
- DataSourceBuilder.create().build()
Spring Boot also provides a utility builder class DataSourceBuilder that can be used to create one o ...
- 解决持久化数据太大,单个节点的硬盘无法存储的问题;解决运算量太大,单个节点的内存、CPU无法处理的问题
需要学习的技术很多,要自学新知识也不是一件容易的事,选择一个自己比较感兴趣的会是一个比较好的开端,于是,打算学一学分布式系统. 带着问题,有目的的学习,先了解整体架构,在深入感兴趣的细节,这是我的计划 ...
- java,maven工程打tar.gz包执行main方法
一,需要在pom.xml文件添加plugin, 项目目录结构 <build> <plugins> <plugin> <artifactId>maven- ...
- 模块(相当于Java里的包)
Python提供丰富和强大的标准库和第三方库. sys库 在命令窗口中可以输入参数 若想将参数打印出来, 可以这样写: print(sys.argv[2]) os库 可以创建文件夹. 类似于Java里 ...