8分钟带你快速了解Connector/Catalog API的核心设计

引言

在现代大数据应用中,数据集成和同步成为企业数据管理的关键环节。随着数据源和数据库的多样化,如何高效地进行数据集成成为企业面临的重要挑战。

file

Apache SeaTunnel 作为一款开源的数据集成工具,致力于解决这一问题。本文将详细介绍 SeaTunnel 的架构、工作流程、Connector 设计及实现,并分享其最新的发展与未来展望。

摘要

Apache SeaTunnel 是一个高效、易用的数据集成工具,支持多种数据源和计算引擎。

本文首先介绍 SeaTunnel 的背景和设计目标,接着详细解析其架构演变和工作流程,重点探讨 SeaTunnel Connector 和 Catalog API 的设计与实现。

最后,本文展望了 SeaTunnel 的未来发展方向,旨在帮助读者全面理解和应用这款优秀的开源工具。

自我介绍与分享主题

大家好,我是周尧,Apache SeaTunnel 的 committer。今天非常高兴有机会与大家分享关于数据集成工具 SeaTunnel 的内容。

本次分享的主题主要包括 SeaTunnel Connector Catalog API 的核心实践以及社区的最新进展。

分享内容概览

今天的分享主要分为以下六个部分:

  1. Apache SeaTunnel 简介
  2. 架构总览
  3. 工作流程
  4. Connector 的发展及设计实现
  5. Catalog 的设计实现
  6. SeaTunnel 近期计划

SeaTunnel 简介

在当今大数据快速发展的背景下,出现了越来越多的数据源、数据仓库和数据库。对于企业而言,如何实现这些异构源与目标端之间的数据同步成为了一个越来越重要的问题。Apache SeaTunnel 提出了一个新的愿景,即成为下一代数据集成工具。

file

设计目标

SeaTunnel 的设计目标主要包括以下六个方面:

  1. 简单易用:通过简单的配置文件(config)和 shell 命令即可完成数据同步任务。
  2. 监控与指标:提供完善的监控和性能指标,能够清晰地展示数据读取和写入量、性能指标以及数据延迟等信息。
  3. 丰富的数据源生态:在设计初期,SeaTunnel 选择了国内外约 300 家数据源,虽然目前实现了其中约 100 家,但这个数字还在不断增加。
  4. 全场景支持:包括离线、实时全量增量、CDC 整库同步、DDL 加表、动态加表等功能。
  5. 数据一致性保障:确保数据不丢失、不重复、精准一致,并且支持断点续传。
  6. 资源优化:优化内存和 CPU 线程的使用,多表同步时实现数据源连接共享,减小数据源的连接压力。

SeaTunnel 发展历史

SeaTunnel 项目于 2017 年开源,当时还未捐献给 Apache 社区。直到 2021 年,SeaTunnel 正式进入 Apache 孵化器,现在已成为顶级项目。

file

Apache SeaTunnel 的架构

在讲解 SeaTunnel 现在的架构之前,我们先了解一下 SeaTunnel V1 的架构。

file

SeaTunnel V1 的架构主要依赖 Spark 和 Flink 两个数据计算引擎,并依赖于 Spark 或 Flink 的自身 Connector 进行数据传输计算。

SeaTunnel V1 架构痛点

V1 架构存在许多痛点,比如 Spark 和 Flink 对同一个数据源实现的 Connector 可能不一致。对于 Connector 参数和自身内容的改造较为困难,且支持不同 Spark 和 Flink 版本的兼容性较差。

SeaTunnel V2 架构

基于上述痛点,我们提出了 SeaTunnel V2 架构。

file

V2 架构主要分为以下几个模块:数据源模块(data source)、引擎模块(engine),以及 SeaTunnel Web。V2 架构通过对 Connector API 和 engine 的解耦,实现了一套统一的 Connector API,可以同时运行在 Spark SeaTunnel engine(即 Zeta)和 Flink 引擎上。

SeaTunnel 架构升级的五个要点

file

  1. 引擎依赖:V1 强依赖于 Spark 和 Flink 的 Connector,而 V2 通过解耦,成为一套独立的 API。
  2. 连接器实现:V1 需要分别实现 Spark 和 Flink 的 Connector,而 V2 只需实现一遍,即可在三个引擎上同步数据。
  3. 引擎版本升级:V1 升级复杂,特别是对于不通用的 Connector,版本支持较旧;V2 中,所有 Connector 支持的 Flink 版本和 Spark 版本或 Zeta 版本均一致。
  4. 参数一致性:V1 中 Spark 和 Flink 的 Connector 参数不一致,而 V2 中参数实现了统一。
  5. 自定义分片逻辑:在数据同步过程中,分片逻辑非常重要。V2 支持完全自定义的分片逻辑,无需对 Spark 和 Flink 的 Connector 进行深入了解和改造。

Apache SeaTunnel 的工作流程

支持的引擎框架

SeaTunnel 目前支持三个主流的框架:

  1. Flink
  2. Spark
  3. SeaTunnel 自研引擎 Zeta

多引擎支持可以更好地兼容企业现有的技术生态,降低 Apache SeaTunnel 的学习成本。

大多数企业都有自己的数据平台,可能已经在使用 Flink 或 Spark,这样可以采用 SeaTunnel Flink 或 SeaTunnel Spark。如果企业没有数据平台,或不想依赖这些数据平台,则可以使用 SeaTunnel Zeta引擎。

SeaTunnel 的执行流程

SeaTunnel 的执行流程如下:

file

  1. 获取任务参数:从配置文件或 Web 等方式获取任务参数。
  2. 创建组件:通过参数以 SPI 的方式获取对应的 Factory,创建对应的 Source、Sink 和 Transform 组件。
  3. 初始化 Catalog:在 Source 初始化时创建 Catalog,以获取 CatalogTable,CatalogTable 通过 TableFactoryContext 在内部传递。
  4. 翻译 Connector:将 SeaTunnel 的 Connector 翻译为引擎内部的 Connector。
  5. 执行任务:通过 Source-Transform-Sink 完成任务的执行。

连接器的执行流程(以 Spark 为例)

file

  1. SourceCoordinator:负责发现 Split 以及协调 SourceReader。
  2. SourceReader:进行数据的实际读取,将数据发送到 Transform 转换后流转到 SinkWriter。
  3. SinkWriter:进行数据的实际写入,或者预提交后将提交信息发送给 SinkCoordinator。
  4. SinkAggregatedCommitter:负责协调 SinkWriter,进行正式提交或触发中止。
  5. SinkWriter:进行最终的提交或中止。

Coordinated Source 与 CDC 的实现

Coordinated Source

Coordinated Source 的典型代表是 CDC(Change Data Capture)。CDC 实现了对于低版本 Flink 和 Spark 的支持,因为在低版本中,source split 的分片枚举器必须是单实例的。这是因为 SourceReader 在消费完数据后,会向分片枚举器请求分发下一个 split。

file

CDC 的工作流程

CDC 的主要流程包括两个阶段:快照阶段和增量读取阶段。

  1. 快照阶段

    • 分片枚举器生成表的多个快照切分,并分配给 reader。
    • 当快照切分读取完成时,reader 会将拆分的高水位报告给枚举器。
    • 当所有的快照切分都报告为高水位,枚举器开始增量阶段,报告一个完成的 split 通知所有 reader 快照阶段结束。
  2. 增量阶段

    • 枚举器结合所有快照拆分和水位信息,获得一个 log 的 split,并通过分片枚举器分发给 reader。
    • 在增量阶段,reader 通常是单并行度,一般分配给 reader 0。
多库多表支持

SeaTunnel 的 JDBC 连接器已经支持多表连接,这减轻了配置的工作量。用户只需配置一个 source,即可进行整库同步或多表同步,减轻 Source 源的连接压力,减少资源浪费。

链接:https://cwiki.apache.org/confluence/display/SEATUNNEL/STIP4-JDBC+source+supports+multi-table+reading+in+one+task

SeaTunnel 的 Sink

Sink Coordinator

Sink Coordinator 需要支持 Exactly-Once 语义。Sink Writer 接收上游数据并写入目标端,支持状态存储。HDFS 状态存储支持基于状态的重启,分布式事务支持两阶段提交,结合 checkpoint 机制保证 Sink 数据只写一次。

Sink API 特性

SeaTunnel 的 Sink API 主要应对以下功能:

  1. 并行读取
  2. 分布式事务
  3. 聚合提交
  4. 多表实现
  5. 状态存储
Sink Committer

SeaTunnel 的 Sink Committer 有多种实现模式,主要包括:

  1. GlobalCommit Run In Driver
  2. GlobalCommit Run In Worker
  3. Commit In Worker

file

Sink 支持多表实现,将不同的 Sink 包裹在一个多表 Sink 中,通过共享连接来减轻 Sink 端的压力和配置的复杂性。

Catalog API 的设计

设计目标

Catalog API 主要面向应用,旨在简化同步作业的配置,提供可视化作业配置的基础。它的设计具有以下四个特点:

  1. 数据源管理:SeaTunnel 可以通过定义一套 API 来创建数据源插件,基于 SPI 实现即可集成此数据源的配置和连接工作。
  2. 元数据获取:主要用于获取 source 的 schema 信息。
  3. 数据类型定义:SeaTunnel 有自己的 SeaTunnel row 数据类型定义,以支持多引擎。
  4. 连接器创建:基于不同的 Connector,可以实现不同的连接器。

Zeta 引擎概览

Zeta 引擎的架构分为 master 和 worker 两个部分:

file

  1. 协调服务(Coordinator Service):负责任务的解析和分发。
  2. 任务执行服务(Task Execution Service):负责实际的任务执行。

未来展望

连接器支持
  • 目前 SeaTunnel 规划支持 300 多个连接器,但目前仅支持了 100 多个。
  • 多表读取和写入的支持仍在完善中,某些连接器已支持多表的读取和写入。
  • 自动建表功能:当源端不存在表时,Sink 端可以自动创建表。
Zeta 引擎发展
  • 资源管理器支持:目前 Zeta 是 standalone 模式,未来将支持 Yarn 或 K8S 资源管理器。
  • Master 和 Worker 的分离:目前 Zeta 的 master 既负责任务解析和分发,也负责任务执行。未来计划将 master 与 worker 分离,让 master 只负责任务解析和分发,提升系统的可扩展性和性能。

结论

Apache SeaTunnel 作为一款高效、易用的数据集成工具,通过其丰富的功能和灵活的架构设计,为企业的数据同步和集成提供了强有力的支持。无论是其多引擎支持、全场景数据集成功能,还是优化的资源利用和数据一致性保障,SeaTunnel 都展示了其在大数据领域的卓越能力。

file

未来,随着更多连接器的支持和 Zeta 引擎的不断发展,SeaTunnel 将继续引领数据集成工具的发展方向。希望通过本文的介绍,读者能够深入理解 SeaTunnel 的设计理念和实现细节,充分利用这款工具为企业数据管理带来更多价值。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Drools开源业务规则引擎(一)- 安装与介绍

文章目录 [toc] Drools开源业务规则引擎(一)- 安装与介绍0.何为规则引擎1.Drools介绍1.1.依赖模块1.2.规则引擎 2.Drools安装2.1.依赖导入2.2.规则的输入和输出类型输入类型输出类型 2.3.创建规则文件2.4.构建可执行规则库2.5.执行结果: 3.Dr…

Oracle Database 23ai新特性:增加聚合函数对INTERVAL数据类型支持

在Oracle早期的版本,聚合函数和分析函数MIN/MAX 就支持了INTERVAL 数据类型。但是,当我们使用SUM或AVG函数对INTERVAL 数据类型进行运算时,就会报错。 随着Oracle Database 23ai 的发布,增加了 AVG 以及 SUM 函数对INTERVAL 数据…

Keepalived+LVS实现负责均衡,高可用的集群

Keepalived的设计目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器,管理服务器池,而不仅仅用作双机热备。使用Keepalived构建LVS群集更加简便易用,主要优势体现在:对LVS负责调度器实现热备切换…

七、MyBatis-Plus高级用法:最优化持久层开发-个人版

七、MyBatis-Plus高级用法:最优化持久层开发 目录 文章目录 七、MyBatis-Plus高级用法:最优化持久层开发目录 一、MyBatis-Plus快速入门1.1 简介1.2 快速入门回顾复习 二、MyBatis-Plus核心功能2.1 基于Mapper接口CRUDInsert方法Delete方法Update方法Se…

实战某大型连锁企业域渗透

点击星标,即时接收最新推文 本文选自《内网安全攻防:红队之路》 扫描二维码五折购书 实战域渗透测试流程 对黑客来说,拿下域控制器是终极目标。然而攻击者空间是如何通过采取信息收集、权限提升、横向移动等一系列手段,从而一步步…

Maven基本使用

1. Maven前瞻 Maven官网:https://maven.apache.org/ Maven镜像:https://mvnrepository.com 1.1、Maven是什么 Maven是一个功能强大的项目管理和构建工具,可以帮助开发人员简化Java项目的构建过程。 在Maven中,使用一个名为 pom.…

Nginx-http_auth_basic_module使用

文章目录 前言一、ngx_http_auth_basic_module二、指令1.auth_basic1.auth_basic_user_file 示例生成密码文件配置basic认证浏览器验证 总结 前言 nginx可以通过HTTP Basic Authutication协议进行用户名和密码的认证。 一、ngx_http_auth_basic_module 生效阶段: …

Apache DolphinScheduler 与 AWS 的 EMR/Redshift 集成实践分享

引言 这篇文章将给大家讲解关于DolphinScheduler与AWS的EMR和Redshift的集成实践,通过本文希望大家能更深入地了解AWS智能湖仓架构,以及DolphinScheduler在实际应用中的重要性。 AWS智能湖仓架构 首先,我们来看一下AWS经典的智能湖仓架构图…

软件运维服务方案(Word原件2024)

软件运维服务方案(Word原件) 1. 服务简述 我们提供全面的软件运维服务,确保软件系统的稳定运行。 1.1 服务内容 包括监控、维护、故障排查与优化。 1.2 服务方式 结合远程与现场服务,灵活响应客户需求。 1.3 服务要求 高效响应&am…

计算机应用数学--第三次作业

第三次作业计算题编程题1 基于降维的机器学习2 深度学习训练方法总结 第三次作业 计算题 (15 分)对于给定矩阵 A A A(规模为 42),求 A A A 的 SVD(奇异值分解),即求 U U U, Σ …

Spring 6.1.10版本源码编译

每篇一句 我们对时间的感知其实非常主观,我们越习惯于我们的生活方式,生活里面的新鲜感就越少,我们对时间 的感知就越快,生命就越短。 1.源码下载 进入Spring官网 https://spring.io/ 按照上图步骤进入如下Spring Framework链…

数据结构--单链表实现

欢迎光顾我的homepage 前言 链表和顺序表都是线性表的一种,但是顺序表在物理结构和逻辑结构上都是连续的,但链表在逻辑结构上是连续的,而在物理结构上不一定连续;来看以下图片来认识链表与顺序表的差别 这里以动态顺序表…

实现沉浸式体验的秘诀:深入了解折幕投影技术!

在当今多媒体技术的浪潮中,投影技术已蜕变成为超越传统内容展示范畴的非凡工具,它深度融合了互动性与沉浸感,成为连接观众与虚拟世界的桥梁。折幕投影技术,作为这一领域的璀璨明珠,更是以其独特而神奇的手法&#xff0…

小酌消烦暑|人间正清欢

小暑是二十四节气之第十一个节气。暑,是炎热的意思,小暑为小热,还不十分热。小暑虽不是一年中最炎热的时节,但紧接着就是一年中最热的节气大暑,民间有"小暑大暑,上蒸下煮"之说。中国多地自小暑起…

开发必备基础知识【字符编码合集】

开发必备基础知识【字符编码合集】 大家在日常开发交流中会发现,别人那里运行的好好的文件,在你电脑上却无法编译,甚至出现一堆莫名其妙的字符,比如:��� 程序中经常遇到一些关于乱码…

科普文:如何进行有效沟通

概叙 你会沟通吗? 你知道正确的沟通应该怎么做吗? 在日常生活和工作中,不会沟通带来的困扰是否让你感同身受? 在工作中,你是否因表达不清让观点无法被同事理解和采纳,影响职业发展? 与上级交流是…

开源全新H5充值系统源码/自定义首页+充值页面/灵活对接上游渠道接口

开源全新H5充值系统源码,系统基于thinkphp框架开发,功能已全完善,可灵活对接其他上游渠道接口,默认对接了大猿人接口,另外可无限制自定义创建充值页面,首页支持后台自定义修改,支持三级分销&…

STM32嵌入式工业机器人控制系统教程

目录 引言环境准备工业机器人控制系统基础代码实现:实现工业机器人控制系统 4.1 数据采集模块 4.2 数据处理与分析 4.3 运动控制系统实现 4.4 用户界面与数据可视化应用场景:工业自动化与优化问题解决方案与优化收尾与总结 1. 引言 工业机器人控制系统…

Java基础(六)——继承

个人简介 👀个人主页: 前端杂货铺 ⚡开源项目: rich-vue3 (基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL) 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 &#x1…

计算机应用数学--第二次作业

第二次作业计算题编程题 第二次作业 计算题 给定图 G G G(如图 1,图中数值为边权值),图切割将其分割成多个互不连通的⼦图。请使⽤谱聚类算法将图 G G G 聚类成 k 2 k 2 k2 类,使得: (a) RatioCut 最…