数据集成平台 - SeaTunnel V2 架构演进

大数据
作为一个整体的数据平台,SeaTunnel 的总体设计目标是成为一个简单易用的、分布式、可扩展的、支持超大数据级的高吞吐低时延的数据集成平台。

随着大数据技术的发展,各种各样的数据库、数仓平台、数据湖等技术不断产生,如何将这些数据在各个数据源和目标端之间进行同步、集成已经成为了企业面临的最大的问题。伴随着 Sqoop 从 Apache 退役,实时同步,CDC、整库同步等场景也渐渐被企业所重视和需要。在这个背景下,下一代数据集成平台 Apache SeaTunnel 专注于解决数据集成领域的核心需求,以支持的数据源多、同步速度快、简单易用被众多企业接受和使用。

一、SeaTunnel 的设计目标

首先和大家分享下 SeaTunnel 的设计目标。

1、整体目标

图片

作为一个整体的数据平台,SeaTunnel 的总体设计目标是成为一个简单易用的、分布式、可扩展的、支持超大数据级的高吞吐低时延的数据集成平台。

当前,数据集成面临的问题主要有五个:

  • 数据源多:已知的数据库、湖、仓等数据源类型非常多,包括一些 saas 网站、软件等,总数量甚至到达几百种,伴随着新技术的出现,这个数字还在不断上涨;不同数据源之间也容易出现版本不兼容的情况,为数据集成平台造成了一些困难;
  • 质量难以保证,监控缺失:最常出现的问题是数据的丢失和重复,很难保证数据的一致性;另一方面,在数据同步过程中出现问题无法进行回滚或者断点执行;同步过程中的监控缺失也会带来信息的不透明,例如不确定已经同步的数据数量等;
  • 资源使用高:对于 CDC 的同步来说,多个表需要同步时,频繁读取 binlog 对数据源造成的压力较大;数据源侧一些大事务或者 Schema 变更等都会影响下游;JDBC 这类同步,当连接数过多时,有时无法保证数据及时到达;
  • 管理维护难:很多企业离线同步和实时同步是分开的,甚至需要写两套代码,不仅日常管理运维非常困难,在进行离线和实时切换时,数据割接甚至需要人工进行;
  • 技术栈复杂:企业的技术栈差异非常大,选择同步组件时学习成本较高。

二、SeaTunnel 的现状

接下来和大家分享下 SeaTunnel 的现状。

1、支持连接器数量

图片

目前 SeaTunnel 已经支持 50+ 的连接器数量,包括 Source 和 Sink 的连接器,例如 ClickHouse、ClickHouseFile、Doris 等;还有 10+ 的 Transform;当然,现在还有许多的连接器正在开发。

2、批流一体

图片

针对同一个连接器,只需要写一套代码,就可以通过配置使用批处理或流处理的模式进行同步处理。流处理的方式中目前实现的纯流和微批两种模式,主要是考虑到要同时支持以 Flink 为代表的纯流和以 Spark 为代表的微批的方式。

3、多引擎支持

图片

SeaTunnel 的多引擎支持主要是为了更好的兼容企业现有的技术栈,降低企业在引入 SeaTunnel 的技术成本。当前主要支持的引擎为:

  • Flink:支持多个版本的 Flink 引擎,并支持 Flink 的分布式快照算法等。
  • Spark:支持 Spark 的微批处理模式,并能像 Flink 一样保存 checkpoint,以支持断点续传和失败会滚。
  • SeaTunnel Engine:为数据同步设计的专用引擎,主要用于企业环境中没有 Flink 和 Spark 的引擎情况下,想要简单使用 SeaTunnel 同步数据的场景。SeaTunnel Engine 解决了 Flink 和 Spark 等计算引擎中出现的一些问题,例如容错粒度大,JDBC 连接过多,binlog 重复读取等。

4、性能和一致性

图片

SeaTunnel 拥有高吞吐、精确性和低时延的特性。

  • 高吞吐:当前 SeaTunnel 所有的连接器都做了并行化处理,从而提高整个数据同步的吞吐量。
  • 精确性:SeaTunnel 支持分布式快照的算法,在连接器内部实现了两阶段提交和幂等写入,保证数据只会处理一次。
  • 低延迟:借助实时处理和微批处理的特性,实现数据低延迟。

5、社区活跃

图片

SeaTunnel 去年年底进入 Apache 孵化,Star 数量骤升,微信用户群已达十多个,近五千人左右的规模。

6、用户繁多

图片

SeaTunnel 已经被许多用户使用,包括互联网企业、传统企业等。

三、SeaTunnel 整体设计

第三部分给大家介绍下 SeaTunnel 的整体设计。

1、SeaTunnel 整体架构

图片

从之前的介绍中大家应该能感受到,SeaTunnel 的核心就是连接器。SeaTunnel 设计了一套独立于引擎的 API,与引擎解耦,并保证基于 API 开发的连接器都能够运行在多个引擎之上。在实际运行中,通过 Translation 层将连接器包装成对应引擎的连接器执行。例如针对 Spark 执行引擎,在实际执行中,连接器会包装成 Spark 的 Source、Transform 和 Sink,同样的道理也适用于 Flink。当然针对前面提到的 SeaTunnel Engine,就不存在转换的这一步了。转换后,SeaTunnel 会将作业提交到对应的引擎中执行,将数据同步到对应的存储中。当然,作为一个完整的系统,以及为了用户的友好程度,SeaTunnel 还提供了 Web 页面,包括代码开发模式的提交,或者引导式任务提交,调度服务,监控和报警服务等。

整个架构涉及六大关键点:

  • Engine Independent Connector API:独立的连接器 API
  • Connector Translation:连接器翻译层
  • Source Connector:Source 连接器
  • Transform Connector:Transform 连接器
  • Sink Connector:Sink 连接器
  • 多引擎支持

2、SeaTunnel 使用方式

图片

SeaTunnel 的使用方式非常简单,只需要填写配置文件,SeaTunnel 会自动解析并生成任务,进行提交开启同步。

3、SeaTunnel 执行流程

图片

  • 首先会针对来源引擎不同的 Source Connector 进行翻译,翻译后由 Source Connector 开始读取数据。
  • 接下来由 Transform Connector 进行数据的标准化
  • 最终通过 Sink Connector 进行写出操作。

当然上述流程中还涉及到引擎内部的一些处理,包括分流,Spark 和 Flink支持 SQL 的语法等。

4、Connector 执行流程

图片

目前可以分为 Driver 端和 Worker 端。在 Driver 端存在SourceCoordinator 管理 Worker端的 Source Split,之后存在枚举器将拆分后的数据任务交给 SourceReader 进行读取。在读取之后会将数据发送给 SinkWriter,此时会对分布式快照进行处理,最终把数据写入目标端。

5、Engine Independent Connector API

图片

独立于引擎的 API 是在今年 3 月份正式进行设计的,核心设计目标是与引擎解耦,专门为数据集成的场景设计。核心目标有以下四点:

  • 多引擎支持:定义一套 SeaTunnel 自己的 API,解耦底层计算引擎
  • 多版本支持:因为 Connector 和不同引擎的 Connector 之间设计了 Transform 层,就可以解决引擎多版本问题,Transform 可以针对不同的版本进行翻译。
  • 流批一体:同样的一套代码,支持在批处理的场景下使用,也支持在流处理的场景下使用。
  • JDBC 复用/数据库日志多表解析:解决 JDBC 连接过多的情况,尽可能通过一个连接同步多张表的数据。同理,对于一个库下的表,尽可能也只同步一次,多个表独立解析即可。

6、Connector Translation

图片

正如之前介绍了,使用 Spark Connector API 可以将独立 API 翻译成Spark 的连接器进行执行,同理也适用于 Flink。

7、Source API

图片

Source API 主要支持五个特性:

  • 通过 Boundedness 接口,实现批流统一。
  • 通过 SourceReader 和 SourceSplit 支持并行读取。
  • 通过 SourceSplit 和 Enumerator 支持动态发现分片。这个在流处理中更为常见,需要及时发现新增的文件分片;还有一种场景是通过正则表达式匹配 Topic,当新的可以匹配上的 Topic 出现的时候,可以自动读取。
  • 通过 SupportCoordinate 和 SourceEvent 支持协调读取。这个主要用于 CDC 同步场景,在初次同步数据时,需要以批处理的方式全量同步数据,同步完成后主动切换成流处理的方式同步增量数据。
  • 通过 SnapshotState 支持状态存储和恢复。当前针对 Flink 引擎是直接使用 Flink 自带的 Snapshot 功能,对于Spark引擎,SesTunnel 定制实现了 Snapshot 保存到 HDFS 的功能。

8、CoordinatedSource Connector

图片

这个连接器支持协调器,主要用于 CDC 的场景。它的主要执行流程为:通过 SourceSplitEnumerator 将一些信息(包括 checkpoint、批流情况等)分发到 ReaderThread 里面的 SourceReader 中。

9、ParallelSource Connector

图片

这个连接器不支持协调器,支持并行处理。具体实现中需要在连接器中定义分区的逻辑,自定义分区的算法。该连接器类型支持多并发。

10、Sink Api

图片

Sink API 主要是配合 Source 支持 Exactly Once 的语义。Sink API 包含几个部分:

  • Sink Writer,接收上游数据并写入目标端。
  • State 存储,支持状态存储,由 Connector 将状态存储在 HDFS 中,支持基于状态重启 Connector。
  • 支持分布式事务,支持两阶段提交的分布式事务,配合引擎的 checkpoint 机制,保证 Sink 数据只写一次。
  • Commiter,支持每个 Task 独立进行事务的提交,主要依赖 Flink 提供的这样的功能。
  • 支持聚合提交,主要用于 Spark 场景下,checkpoint 状态保存,需要使用到。

11、GlobalCommit Run In Driver

图片

Sink API 内部 Commit 的类型之一,在 Driver 端运行,也就是上面提到的聚合提交。在这种模式下,Global Commiter 运行在 Driver 端,但是SinkWriter 运行在 Worker 端,主要适用于 Spark v2.3+ 以及 Flink v1.12+ 版本的情况。

12、GlobalCommit Run In Worker

图片

Sink API 内部 Commit 的类型之一。这种模式下,Global Commiter 和SinkWriter 均运行在 Worker 端,主要适用于 Flink v1.11- 的版本,Spark 不适用。

13、Commit In Worker

图片

Sink API 内部 Commit 的类型之一。这种模式下支持在 Worker 端,每个 Task 单独的 Commit 操作。这个模式适用于 Flink 所有版本,Spark 不适用。

14、SeaTunnel Table & Catalog API

图片

这套 API 主要为面向应用的 API,能够简化同步配置,提供可视化作业配置的基础。主要包含下面四个方面:

  • 数据源管理:SeaTunnel 定义了一套 API 来支持创建数据源插件,基于 SPI 实现后即可集成该数据源的配置、连接测试工作等。
  • 元数据获取主要用于引导式界面,选择数据源后,支持自动获取元数据的表结构,方便可视化的配置同步作业的源和目标端的表名映射,字段映射等。
  • 数据类型定义:所有连接器都使用 SeaTunnel 定义的格式,在 Connector Translation 会转换为对应引擎的格式。
  • 连接器创建:SeaTunnel 提供了一套 API 用于创建自动获取信息创建 Source、Sink 等实例。

四、SeaTunnel 近期规划

图片

SeaTunnel 的核心目标为更多、更快、更好用,为了达到这个目标,SeaTunnel 近期规划目标为以下三点:

  • 连接器数量翻倍,总共能支持 80+ 连接器。
  • 发布 SeaTunnel Web,支持可视化作业管理,支持编程式和引导式的作业配置,支持内部调度(处理简单任务,crontab 为主)和第三方调度(以 dolphin scheduler 为主)。
  • 发布 SeaTunnel Engine,支持通过减少 JDBC 的连接和 binlog 的重复读取以达到更省资源的效果;通过拆分任务为 pipeline,pipeline 之间的报错不会相互影响,也支持独立重启操作;借助共享线程以及底层的处理,推动整体同步任务更快的完成;过程中加入监控指标,监控同步任务运行中 Connector 的运行状态,包括数据量和数据质量。
责任编辑:姜华 来源: DataFunTalk
相关推荐

2010-08-06 14:07:21

RIP V2

2010-08-05 17:00:04

RIP V2协议

2021-08-18 10:39:13

Ubuntu 21.1Linux 内核开发人员

2023-05-10 07:21:58

数据平台架构

2023-03-16 07:20:15

大数据平台云数据

2013-04-13 13:49:35

组播IGMP V2包

2012-04-24 18:10:56

华为E5

2023-06-20 08:01:09

RoseDB存储数据

2021-06-05 10:16:55

Linkerd 服务网格Kubernetes

2009-10-15 09:35:04

Oracle新数据库机

2023-01-09 12:41:55

模型

2018-03-28 09:53:50

Android架构演进

2022-08-01 15:45:43

数据治理数据集成数据驱动

2014-02-25 11:03:51

英特尔至强E7 v2

2009-10-12 08:21:09

ExadataOracleOPN

2022-08-26 20:00:00

系统架构

2022-08-25 22:24:19

架构电商系统

2022-12-14 10:21:25

目标检测框架

2024-03-06 11:22:33

架构演进技巧

2024-02-20 07:55:48

数据平台架构湖仓一体Alluxio
点赞
收藏

51CTO技术栈公众号