代立冬:基于Apache Doris+SeaTunnel 实现多源实时数据仓库解决方案探索实践

大家好,我是白鲸开源的联合创始人代立冬,同时担任 Apache DolphinScheduler 的 PMC chair 和 SeaTunnel 的 PMC。作为 Apache Foundation 的成员和孵化器导师,我积极参与推动多个开源项目的发展,帮助它们通过孵化器成长为 Apache 的顶级项目。

今天的分享的主题其实还是从开源到商业,Apache SeaTunnel 本身就是做数据同步软件,也经历过 Apache 孵化器的孵化,目前已经毕业成为顶级项目,也会跟大家分享一下它的核心特性。包括为什么我们又重新造轮子,那 Doris 和 WhaleTunnel/SeaTunnel 这个多元实时数仓是怎么去解决一些社区用户的问题?另外也给大家分享一下我们社区的 roadmap 和最近的一些进展。

白鲸开源愿景与使命

白鲸开源其实是一家 DataOps 解决方案提供商,目前致力于数据调度和同步领域,简单理解就是大数据的降本增效。我们的目标是通过高效的数据处理解决方案来降低运营成本并提高效率。

file

当前的重点是改善数据调度和同步的流程,或者是从开发到生产上线整个流程的打通,从而实现从开发到生产的快速过渡。

核心开源项目

我们主要投入于两个 Apache 顶级开源项目:Apache DolphinScheduler 和 Apache SeaTunnel。

DolphinScheduler 是一个分布式工作流调度平台,而 SeaTunnel 则专注于数据集成和同步。

这两个项目在国内影响力也越来越大,在整个大数据生态包括在数据处理和同步方面发挥着关键作用。

数据同步中的挑战

在数据同步领域,我们面临多种挑战,处理众多数据源、版本兼容问题、大数据量带来的数据丢失或重复问题。比如说像 Oracle,它有很多版本,而且每个版本之间是不兼容的,所以你需要去支持它的 CDC,或者是要能够去捕获到它的 DDL 变更这样的场景,每个版本你都要去考虑怎么去适配,这个工作量是很大的。

此外,如何保证数据的精确一致性,以及在出现问题时如何快速回滚?同步过程中需要监控等等,这些都是数据同步中面临的痛点问题。

还有一个痛点的情况,就是当你频繁地去读取 binlog,对数据源的影响会非常大,DBA 会非常关注对数据库源数据库端产生的压力情况,还有大事务 schema 变更会影响到下游,尤其数据量大的这种场景下,大家都会非常关心!

还有离线跟实时同步,通常以前都是需要分开写,这也是面临的问题,就是批是批,流是流,维护会非常的困难。

经常做数据迁移的小伙伴肯定会面临这样痛苦的过程,就是我要做数据迁移通常都是要以月/季的,数据迁移几个月、小半年这样的一个时间,SeaTunnel 的定位其实就是做一个高性能的数据集成工具,希望能够更多的像调度工具和上下游的这些工具去打通,我们也欢迎大家能够去集成 SeaTunnel 去做数据处理的这个事情!

file

在今年的 6 月,Apache SeaTunnel 正式成为了 Apache 基金会的顶级项目,也是首个国人主导的数据集成项目在 Apache 基金会占了一席之地,它不仅能够应对每天同步万亿级的数据量非常大的场景,包括在海外现在也有一些很典型的案例,像在美国最大的商业银行JPMorgan、印度电信、英国最大的零售商等都应用在了生产的环境中,在国内像哔哩哔哩、唯品会每天同步上千亿的数据,这都是 SeaTunnel 的用户案例。

file

SeaTunnel 核心功能与目标

file

简单易用

SeaTunnel 的第一个目标是简单易用。为此,社区最近开源了一个拖拉拽的可视化版本,但距离真正的简单易用可能还有一些距离。同时,它既支持命令行操作,也支持 Web 可视化的操作。

支持多种数据源

目前,SeaTunnel 已经支持 100 多个数据源。这种广泛的兼容性使得它可以适应不同的数据环境。

批流一体

SeaTunnel 还支持批流一体的操作,这意味着不需要为批处理和流处理编写两套不同的代码。这种设计可以大大提高开发效率和代码维护性。

支持整库同步和自动变更

SeaTunnel 可以支持整库同步,同时也支持自动变更,这主要解决了数据切割的问题。全量到增量的无锁自动切换可以大大提高数据处理的效率。

支持读缓冲和动态速率控制

SeaTunnel 可以支持同一个源同步到多个目标,比如从 MySQL 同步到 Hive 或者 Doris。同时,它还支持动态速率的控制,尤其是源数据库端的小伙伴会非常关注这个功能。这种设计可以在保证数据处理效率的同时,防止因速率过快导致的资源浪费或者其他问题。

支持 schema 变更和断点续传

SeaTunnel 可以支持 schema 变更,即数据库结构的变化。同时,它还支持断点续传和精确一致性,这需要上下游数据库的配合才能实现。这种设计可以大大提高数据处理的稳定性和准确性。

支持云组件和精确一致性

SeaTunnel 不仅支持各种云组件,如 RedShift、S3、RDS、DynamoDB 等,还支持像阿里云的 OSS File、TableStore 等。

同时,它可以实现精确一致性,这是通过上下游数据库的配合实现的。这种设计可以大大提高数据处理的可靠性和准确性。

但是像 HDFS 它就做不到这个精确一致。MySQL 这些传统的数据库基本上都是可以做到精确一致

比如说我们要从 MySQL 要去同步到 Doris,或者有些场景可能比如说要从 Mongo 去同步,或者是从 Oracle、MySQL 要去同步到这个像 Doris 的这样的去做 OLAP,去做这个一些实时数仓的一些场景会比较常见一些。比如说它是否能支持双向同步,我也可以支持各种数据源之间的 Source,以及目标端 Sink,这是它的数据去向。

适用场景

SeaTunnel 适用于从各种数据源到各种目标的数据集成和同步场景。它支持双向同步,可以支持各种数据源之间的 Source 以及目标端的 Sink。

file

以前常见的互联网解决方案,有一些Spark和Flink的场景,那现在你 SeaTunnel 的时候,它会有一个 API,它其实是可以支持跑在 Spark、Flink 上的。它还有一个 Source API,其实是用于扩展各种数据源,我们的目标其实是连接各种数据源,不仅仅是数据库,那还有 SaaS,还有 API 接口,那还有一些本地的文件数据。

此外,它还支持批量、全量、增量的集成,甚至无主键的数据也可以支持。

性能优势

与一些常见的互联网解决方案相比,例如 Airbyte 和 Data X 单机版,SeaTunnel 的性能要快 30 多倍。

我们跟 Data X 的 PK 时候只有单机,一般是 30% - 50% 之间,它的单机做得还可以。但是它没有集群化的版本,也只能做离线的场景。

迭代速度优势

另一个值得称赞的是,SeaTunnel 的版本迭代速度非常快,基本上每个月都会发布一个新的版本。这种快速迭代的速度不仅增加了功能的新颖性和实用性,也提高了整个项目的活力和竞争力。

架构简介

Apache SeaTunnel 的整体架构是无中心化的,类似于 DolphinSchedule 的设计,已经是非常成熟的一个架构了。这种设计可以保证数据从源到目标的流畅传输。

file

它的核心思想是将任务分解成多个 pipeline,如果某个链条出现问题,用户只需回滚相应的链条,而不是整个作业。这种设计在时间和资源成本上更加节约,同时也提高了性能。

从上图左侧来说它是支持各种源,有 batch、stream、 CDC 的场景,也有这个各种需要去读数据 read data,然后读到 SeaTunnel 这个架构之上,其实就是也有一个 coordinator,是充当了一个 master 的角色,大家把它理解成一个 master,然后 task execution service 其实就是做具体任务的,把它理解成 worker 这样的一个角色,可以这么去理解, master 是负责去分配这任务,然后 worker 是去执行具体的任务,但 worker 执行任务的时候,它其实会分到底是读取的任务,还是做数据转换的任务,还是去写的任务?

而 read task、write task,或是做 convert transform 的 task,这里边其实会有 master,还有 resource manager 去做资源管理以及做 pipeline 设计!

此外,SeaTunnel 使用了动态线程共享技术,避免了资源浪费。以 Spark 为例,启动作业时需要消耗大量的内存,而使用 SeaTunnel 或其商业版 WhaleTunnel,内核可以最大限度地被共享,内核与开源版保持一致。

架构特性

SeaTunnel 支持 Flink 和 Spark,并在近两年设计了一个专为数据同步场景设计的引擎 Zeta。

file 尽管 Spark 和 Flink 也是为计算而生的,但数据同步的要求与计算有所不同,它更强调性能、稳定性和支持的数据源数量。因此,我们推荐使用 Zeta 引擎。

此外,SeaTunnel 解决了 Spark 和 Flink 等场景中存在的问题。 任务出错时需要回滚整个作业; 可视化开发方面也没有提供完整的解决方案; 对于资源占用过多的场景,一个 task 只能处理一张表,这可能导致资源浪费和影响 DBA 业务场景; 以及对表结构变更、CDC 等场景的不支持。

而 SeaTunnel 正是为了解决这些问题而设计的。

解耦设计

另一个重要的特性是 SeaTunnel 与执行引擎解耦。最早的版本只支持 Spark,但随着 Spark 版本的升级,我们面临着兼容性问题。每个 Connector 都需要为不同的版本重新设计实现,这是一项耗时且繁琐的工作。因此,我们定义了一套 SeaTunnel 自己的 API,与具体的执行引擎解耦。这样,当新的更快、更高性能的数据引擎出现时,我们只需要更新 Connector 即可。

file

此外,我们还提供了 Source API、Sink API、checkpoint API 和 translation 层等多种 API,通过翻译层将每个卡点翻译成 Flink、Spark、Zata 等不同引擎的底层 API,避免了每个 Connector 都需要适配的问题。同时,也支持流批一体的新 Connector,只需按 API 实现一次即可。

总之,SeaTunnel 的架构和特性使其成为解决数据同步等场景的理想选择。它不仅提供了简单易用的界面和强大的功能,还通过与执行引擎解耦和多种 API 的支持提高了效率和性能。

无中心化设计

前面提到了 SeaTunnel 采用了无中心化的设计,每个 server 都可以充当 master 的角色,也可以充当 worker 的角色。这种设计具有自动选举功能,确保了系统的稳定性和可靠性。

file

同时,它还支持弹性的伸缩,例如在进行精确处理时,会涉及到 checkpoint 以及分布式快照的创建,以确保数据的完整性和一致性。

这种设计也支持断点续传,对于因异常导致的数据传输中断,可以自动回退到上一个切割方向的点,保证数据传输的连续性和完整性。

性能测试与对比

为了测试 SeaTunnel 的性能,我们进行了一些场景的测试。

从 MySQL 到 Hive,PG 到 Hive,SQL Server 到 Hive 和 Oracle 到 Hive 的场景中,SeaTunnel 的同步速度比 Data X快 30%-50%。

file

在云同步的场景中,SeaTunnel 的表现更为出色,其性能是 Airbat 的 30 多倍,与 AWS 的数据同步工具 Glue 相比,也快2-5 倍。

file

我们还对比了 SeaTunnel 与 Data X、Sqoop、Flume 等数据集成工具。这些工具在支持自动建表、整库同步、断点续传、离线增量和 CDC 等方面的能力各有不同。

其中,Data X 社区虽然已经不再维护,但其用户仍然较多。然而,大多数场景中,Data X 并不能提供很好的支持。相比之下,SeaTunnel 在这些方面表现出色。

支持多种数据源

file

SeaTunnel 支持多种数据源,包括 MySQL、PostgreSQL、Oracle、SQL Server 等。

它还支持将数据同步到 Doris 等数据库。用户可以通过可视化的界面配置数据源信息,而不需要为每个任务都手动配置。 file

file

字段映射

file

状态监控

此外,SeaTunnel 还支持流的导入、MySQL 的 CDC 等特性,并支持多表同步或整库同步等场景。

实时数仓方案

白鲸开源基于 Apache DolphinScheduler 和 Apache SeaTunnel 打造的商业产品 WhaleStudio ,是分布式、云原生并带有强大可视化界面的 DataOps 系统,增加了商业客户所需的企业级特性: file

  • 全面支持云原生—云、仓、湖 实时/离线批流一体化任务管控
  • 低代码实现企业大数据的高可用调度和海量数据批量/实时同步
  • 完善的 DataOps 流程可无缝集成代码工具
  • 丰富的数据源对接和传统 ETL 数据组件支持
  • 增强可观测性和操作性,提高运维与任务运行态人工干预能力
  • 复杂时间的管理优化&灵活多样的触发机制&强大的数据科学平台支持
  • 完善的权限控制&审计系统等

在 Whalestudio 中,DolphinScheduler 和 SeaTunnel 被视为两个独立的模块,但它们共享一些共同的功能,例如数据源中心的配置只需要进行一次。这种设计使得数据同步和调度更加高效和便捷。

file

首先,我们需要明白开源并不意味着无限制的免费。在开源世界中,每个项目都有其边界,只有将项目做得非常垂直,才能更好地进行迭代和创新。

因此,我们的开源理念是专注于将项目做得更精细、更垂直,以实现更好的可迭代性。与商业理念不同的是,开源强调的是共享和协作,而商业则更注重整体解决方案和客户的需求。

SeaTunnel 是一个开源项目。在商业版 WhaleStudio 当中,IDE 和可视化配置能力是其中的重要组成部分,它们可以帮助用户轻松地进行 SQL 编写、Python 编程以及业务日期切分等操作。此外,我们还在商业版中提供了一些额外的功能,例如对监管报送等数据的加权处理,以及更丰富的连接器支持。

支持虚拟表

在开源项目中,我们有一个虚拟表的抽象概念。比如说 Kafka、文件这些我们都把它抽象成表,这方便后边去做字段的映射。比如说要去读 Excel 的数据,读到 Doris,或者说其他的数据库,比如说 MySQL,那前面做好了映射,虚拟表建好,后边只是去拖拽一下就 OK 了,不需要再去做这个映射配置这么复杂的事情,我们前阵子跟 SelectDB 做了一个商业的联合解决方案,就是 SelectDB 加上 WhaleTunnel。

file

在这个场景中,各种产品充当着不同的角色。SelectDB 用于实时数仓,主要处理数据分析和查询。WhaleTunnel 用于数据同步和导入,它可以从各种数据源获取数据并将其导入到目标位置。WhaleScheduler 用于协调和调度这些任务,确保数据在正确的时间被处理。

file

这些产品共同构成了一个完整的数据同步和集成解决方案,可以轻松地处理各种数据源,并通过调度和同步机制将数据导入到实时数仓中进行分析。这种方案具有高效、灵活和可扩展的优点,可以帮助用户快速实现从开发到生产上线的整个流程。

同时,这个解决方案还提供了一些额外的功能,如调试、IDE 支持和数据工作流的血缘关系分析等,这些功能都是在商业版中提供的。用户可以通过这个方案获得更全面的数据同步、集成和分析能力,从而更好地管理和利用用户的数据资产。

Roadmap

在未来的发展计划中,我们将继续丰富连接器支持,例如增加对 Oracle CDC 和 Mongo DB CDC 的支持。同时,我们也将提供更多可插拔能力,以便用户可以根据自己的需求进行定制。

file

此外,我们还将与主流的调度系统集成,例如 Apache DolphinScheduler 和 Airflow,以提供更全面的解决方案。

最后,我们还将支持 K8S operator 场景,以帮助用户更好地管理和调度他们的数据工作流。

总之,我们的目标是让中国的开源项目走向世界,让更多的人了解并参与到开源项目中来。

无论您是开源的支持者还是商业化的拥护者,我们都欢迎您加入到我们的大家庭中来。谢谢大家!

本文由 白鲸开源科技 提供发布支持!

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

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

相关文章

某度旋转验证码v2 逆向分析

v2主要依据是核心 JS 文件mkd_v2.js 版本,如下图所示: 第一次 https://passport.baidu.com/cap/init 接口,请求的 ak 是固定值,当然不同场景不同网站是不一样的,_ 时间戳,ver1,返回值 as、tk 都…

android项目实战之使用框架 集成多图片、视频的上传

效果图 实现方式,本功能使用PictureSelector 第三方库 。作者项目地址:https://github.com/LuckSiege/PictureSelector 1. builder.gradle 增加 implementation io.github.lucksiege:pictureselector:v3.11.1implementation com.tbruyelle.rxpermissio…

线性回归实战

3.1 使用正规方程进行求解 3.1.1 简单线性回归 公式 : y w x b y wx b ywxb 一元一次方程,在机器学习中一元表示一个特征,b表示截距,y表示目标值。 使用代码进行实现: 导入包 import numpy as np import matp…

中缀表达式转后缀表达式与后缀表达式计算(详解)

**中缀表达式转后缀表达式的一般步骤如下: 1:创建一个空的栈和一个空的输出列表。 2:从左到右扫描中缀表达式的每个字符。 3:如果当前字符是操作数,则直接将其加入到输出列表中。 4:如果当前字符是运算符&a…

Linux 常用命令汇总

1 linux定时任务 查看定时任务:crontab -l 每晚一点半执行定时任务: 30 1 * * * sh /var/lib/pgsql/pg_db_backup.sh >> /var/lib/pgsql/pg_db_backup.log 2>&1 配置定时任务:crontab -e 2 linux 内核版本查询 cat /etc/r…

我有才打造私域流量的知识付费小程序平台

在当今数字化时代,知识付费市场正在迅速崛起,而私域流量的概念也日益受到重视。私域流量指的是企业通过自有渠道获取的、能够自由支配的流量,这种流量具有更高的用户粘性和转化率。因此,打造一个基于私域流量的知识付费小程序平台…

实现:切换页面切换标题,扩展 vue-router 的类型

布局容器-页面标题 网址:https://router.vuejs.org/zh/guide/advanced/meta 给每一个路由添加 元信息 数据 router/index.ts const router createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{ path: /login, component: () > im…

第一启富金:新添澳大利亚(ASIC)牌照

第一启富金:澳大利亞證券及投資委員會(ASIC) GOLDWELL GLOBAL PTY LTD 是 WHOLESALE INVESTOR SERVICES PTY LTD(CAR 編號 001304943)的企業授權代表開發澳大利亞客戶,WHOLESALE INVESTOR SERVICES PTY LT…

XML是什么

XML是是什么? XML(Extensible Markup Language),中文是可扩展标记语言,是标准通用标记语言的子集。它是一种标记语言,用于标记电子文档,使其结构化。 XML可以用来标记数据,定义数据…

【软件推荐】文本转语音,语音转wav,导入ue5

文字转语音 在线免费文字转语音 - TTSMaker官网 | 马克配音https://ttsmaker.cn/ 文件转换器 语音转wav Convertio — 文件转换器https://convertio.co/zh/

HarmonyOS应用程序框架——UIAbility实操

UIAbility概述 UIAbility是一种包含用户界面的应用组件,主要用于和用户进行交互。UIAbility也是系统调度的单元,为应用提供窗口在其中绘制界面。 每一个UIAbility实例,都对应于一个最近任务列表中的任务。 一个应用可以有一个UIAbility&…

Leetcode—901.股票价格跨度【中等】

2023每日刷题&#xff08;五十二&#xff09; Leetcode—901.股票价格跨度 算法思想 实现代码 class StockSpanner { public:stack<pair<int, int>> st;int curday -1;StockSpanner() {st.emplace(-1, INT_MAX);}int next(int price) {while(price > st.top(…

油猴(Tampermonkey)浏览器插件简单自定义脚本开发

介绍 浏览器插件&#xff0c;包括油猴插件和其他插件&#xff0c;通过它们可以实现浏览器网页的定制化与功能增强。 其他插件一般只有某种具体的功能&#xff0c;且已经写死而不能更改&#xff0c;比如Adblock插件只用于去广告。 油猴插件是一款用于管理用户脚本的插件&…

使用Rust 构建C 组件

协议解析&#xff0c;这不就很快了&#xff0c;而且原生的标准库红黑树和avl 树支持&#xff0c;异步tokio 这些库&#xff0c;编写应用组件就很快了 rust 标准库不支持 unix 的消息队列&#xff0c;但是支持 shm 和 uds&#xff0c;后者从多方面考虑都比&#xff0c;消息队列更…

教育类直播介绍

教育类直播是一种在线教育形式&#xff0c;它允许学生和教师通过实时视频通话进行互动学习。这种学习方式可以为学生提供更灵活的学习时间和地点&#xff0c;同时也可以帮助教师更好地与学生进行互动和指导。 在教育类直播中&#xff0c;学生可以通过网络与教师和其他学生进行…

c/c++中一些不常用但有用的知识

1.变长数组 bool fun(int cnt) {unsigned char data[cnt];return true; } 在 C 语言中&#xff0c;变长数组&#xff08;Variable Length Arrays&#xff0c;VLA&#xff09;是 C99 标准引入的特性&#xff0c;允许使用变量来定义数组的长度。因此&#xff0c;在 C 版本的代码…

快速在VMware虚拟机上运行Kali Linux(保姆级教程)

本期将演示如何在VMware虚拟机上快速、轻松地安装Kali Linux。Kali Linux是一款专为渗透测试和网络安全而设计的操作系统&#xff0c;拥有很多强大的工具和功能。 在运行任何虚拟机之前&#xff0c;一定要先确保已经打开主板BIOS上的虚拟化支持。 下载VMware 接着来到vmware的…

vue 一直运行 /sockjs-node/info?及 /sockjs-node/info报错解决办法

sockjs-node介绍 sockjs-node 是一个JavaScript库&#xff0c;提供跨浏览器JavaScript的API&#xff0c;创建了一个低延迟、全双工的浏览器和web服务器之间通信通道。 服务端&#xff1a;sockjs-node&#xff08;https://github.com/sockjs/sockjs-node&#xff09; 客户端&a…

[全志Tina/Linux]全志修改bootlogo分区数据从而修改bootlogo

一、需求 在不进行镜像烧录的情况下&#xff0c;通过启动项或脚本将已存在于主板的bootlogo文件更新到bootlogo分区中&#xff0c;从而实现bootlogo的更新 二、操作 1、在主板上查找bootlogo文件路径 find -name bootlogo* 实机效果&#xff1a; 2、进入文件夹路径 cd ./d…

Java网络编程——对象的序列化与反序列化

当两个进程进行远程通信时&#xff0c;彼此可以发送各种类型的数据&#xff0c;如文本、图片、语音和视频等。无论是何种类型的数据&#xff0c;都会以二进制序列的形式在网络上传送。当两个Java进程进行远程通信时&#xff0c;一个进程能否把一个Java对象发送给另一个进程呢&a…