SeaTunnel 超大数据量数据集成平台设计

导读:本文将介绍 SeaTunnel 超大数据量的数据集成平台,主要围绕以下内容展开:

  • SeaTunnel 的设计目标

  • SeaTunnel 现状

  • SeaTunnel 整体设计

  • 近期规划

分享嘉宾|高俊 白鲸开源 架构师

编辑整理|王鹏 滴滴出行

出品社区|DataFun


01

SeaTunnel 的设计目标

SeaTunnel 的目标是打造一个简单易用的、分布式可扩展的支持超大数据级的高吞吐低延时的数据集成平台,主要解决以下 4 个问题:

  • 数据源多,版本间不兼容,而且不断有新的出现

  • 离线同步和实时同步常被分开管理,维护困难

  • 企业技术栈差异大,导致选择同步组件时需要更多的学习成本

  • 数据同步需要高吞吐低时延,数据一致性要求高

02

SeaTunnel 现状

SeaTunnel 超大数据量数据集成平台设计_第1张图片

目前 SeaTunnel 支持的连接器有 50 个以上,包括 Source 有 20 多个,目标端 20 多个,Transform 有十几个。

SeaTunnel 超大数据量数据集成平台设计_第2张图片

这些连接器基本上都是批流一体的,Apache Pulsar 连接器让开发者只实现一个连接器,就可以同时支持离线同步任务和实时同步任务。同时可以支持纯流和微批两种方式。

SeaTunnel 超大数据量数据集成平台设计_第3张图片

SeaTunnel 支持多引擎,以便更好的兼容企业已有的技术生态,降低企业在数据同步场景下使用 SeaTunnel 的技术成本。主流的大数据处理引擎 SeaTunnel 都支持:包括多个版本的 Flink,Spark,以及 SeaTunnel 自己的引擎 SeaTunnel Engine。

在性能和一致性方面,SeaTunnel 具有以下特性:

  • 高吞吐:SeaTunnel 支持 Source/Transform/Sink 算子的并行化处理,提高吞吐性能。

  • 低延迟:基于引擎提供的实时处理或微批处理实现低延迟。

  • 精确性:基于引擎提供的分布式快照算法,包括 Sink 端两阶段提交、幂等写入,Source 端的读回放等这些特性,保证数据精确处理一次(Exactly-Once)。

03

SeaTunnel 整体设计

1. 整体架构

SeaTunnel 超大数据量数据集成平台设计_第4张图片

SeaTunnel 整体架构分为以下几个部分:

  • 数据源:用于从各种数据源中读取数据,包含了目前所有常见的数据库,湖和仓库,以及国内外的 SaaS 服务。

  • 目标端:主要负责往目标端写入数据,包含了目前常见的数据库、湖、仓,以及国内外的 SaaS 服务。

  • 数据处理引擎:SeaTunnel 默认使用自己的引擎 SeaTunnel Engine 同步数据,同时也支持使用 Spark/Flink。

  • 基于这些连接器,有一个转化端,把连接器转化为适应不同引擎运行的 Connector。

  • Table API:为了降低上层的使用难度和提高通用性,提供了 Table API,基于 Table API 上层用户可以做Web端或者以 Table API 的形式创建应用。

2. 执行流程

SeaTunnel 超大数据量数据集成平台设计_第5张图片

SeaTunnel 的执行流程如上图所示,最上面是 SeaTunnel 内部 SQL 和API 的定义,基于这些定义生成连接器,然后将连接器和 Job 提交到对应的引擎上进行处理,最终数据通过Sink写入目标端。

3. 连接器内部运行策略

SeaTunnel 超大数据量数据集成平台设计_第6张图片

SeaTunnel Driver 端运行着 SourceCoordinator 和 SinkCoordinator协调器,Worker 端运行着 SourceReader 和 SinkWriter。SourceReader 对读取 SoureSplit 分片中数据,读取完后发送给 SinkWriter,SinkWriter 按照 SinkCoordinator 中的逻辑执行状态的存储、两阶段提交等操作,保证数据的一致性。

4. 独立 API

SeaTunnel 专为数据集成场景设计了独立 API,独立 API 是与引擎解藕的,主要有以下 4 个特点:

  • 多引擎支持:通过定义一套 SeaTunnel 自己的 API,解决以往针对不同的处理引擎需要写两套不同的 Connector 的问题,实现一套代码可在不同的引擎上执行。

  • 多版本支持:通过 Translation 层将 Connector 与引擎解藕,解决以往为了支持底层引擎一个新的版本,大部分 Connector 都需要修改代码的问题。

  • 流批一体:统一了流和批的处理 API,新的 Connector 只需要按 API 实现一次,即可同 时支持流处理和批处理下的数据集成。

  • JDBC 多复用/数据库日志多表解析:支持多表或整库同步,解决 JDBC 连接过多的问题;支持多表或整库数据库日志读取解析,解决 CDC 多表同步场景下需要重复解析日志的问题。

5. Connector Translation

Connector Translation 层将 Connector 与引擎解藕,解决以往为了支持底层引擎一个新的版本,大部分 Connector 都需要修改代码的问题,下图展示了基于 Connector Translation 机制的 SeaTunnel Connector 是如何转换成不同的引擎执行的:

SeaTunnel 超大数据量数据集成平台设计_第7张图片

6. Source API

Source API 主要包括 Source 连接器和 Source API,下图是 Source的特性与实现 Source 特性的 Source API 的对应关系:

SeaTunnel 超大数据量数据集成平台设计_第8张图片

  • 统一离线与实时 API:通过 Boundedness API 实现

  • 支持并行读取:通过 SourceReader & Source Split API 实现

  • 支持动态发现分片:通过 Source Split & Enumerator API 实现。比如我们在 Source 端想基于正则表达式读取 Kafka Topic,如果有新的 Topic 被创建,正则表达式将这个 Topic 匹配之后就可以进行数据读取。这个功能就可以通过 Source Split & Enumerator API 来实现

  • 支持协调读取:主要 CDC 场景下使用。比如除了从批量同步切换到实时增量同步,这个过程就需要 SupportCoordinate &SourceEvent 协调读取这套 API 来参与

  • 支持状态存储、恢复:为了能够实现数据的精确一致消费、重启恢复,需要支持状态存储、恢复,这个功能主要是通过 SnapshotState API 来实现

7. Source Connector

Source Connector 有两种,分别是 CoordinatedSource Connector 和ParallelSource Connector。

CoordinatedSource Connector 支持协调器,通过事件的方式将 Split 发送给 SourceReader,目前只支持一个并发。

SeaTunnel 超大数据量数据集成平台设计_第9张图片

ParallelSource Connector 支持多并发,需要定义分区算法规则让协调器知道分片应该发送给哪个 SourceReader。

SeaTunnel 超大数据量数据集成平台设计_第10张图片

8. Sink API

Sink API 的主要目标是配合 Source 支持 Exactly-Once 一次语义,主要有以下 5 个部分:

SeaTunnel 超大数据量数据集成平台设计_第11张图片

  • Sink Write: 接受上游数据并写入目标端。

  • State 储存:依赖底层的分布式快照算法的状态通知机制,比如Flink在做分布式快照时,会有一些事件的通知, Sink 连接器接收到这些事件通知后,将状态存储在存储 HDFS,同时支持基于状态重启 Connector。

  • 分布式事务:支持两阶段提交的分布式事务,配合引擎的 Checkpoint 机制,保证 Sink 数据只写一次。

  • Commiter:支持每个 Task 独立进行事务提交,常用于 Flink 的场景。

  • 聚合提交:支持所有 Sink Task 一起聚合提交,常用于 Spark 的场景。

9. GlobalCommit Run In Driver

GlobalCommit 的第一种模式是 Commit 运行在 Driver 端,SinkWriter运行在 Worker 端,通过 Driver 端和 Worker 端的通信来进行协调,该模式的运行机制如下:

SeaTunnel 超大数据量数据集成平台设计_第12张图片

第二种模式是 Commit 和 SinkWriter 都运行在 Worker 端,这种模式是为了适配 Flink version <= 1.11 这种情况,Spark 不支持该模式,该模式运行机制如下:

SeaTunnel 超大数据量数据集成平台设计_第13张图片

第三种模式是每个 Task 直接进行 Commit,不需要进行聚合,Flink 的所有版本都支持这种模式,Spark 不支持:

SeaTunnel 超大数据量数据集成平台设计_第14张图片

10. SeaTunnel Table & Catalog API

这些 API 是面向应用的 API,目的是简化同步作业配置,提供可视化作业配置的基础。主要有以下四个方面的 API:

  • 数据源管理:SeaTunnel 定义了一套 API 来支持创建数据源插件,基于 SPI 实现后即可集成该数据源的配置、连接测试工作。

  • 元数据获取:支持获取数据源的表结构(库名、表名、字段名、字段类型等),方便可视化的配置同步作业的源和目标域的表名映射,字段映射等。

  • 数据类型定义:由于需要支持多引擎,所有连接器中都使用SeaTunnel的格式,在 Connector Translation 会转换为对应引擎的格式。

  • 连接器创建:SeaTunnel提供了一套 API 用于创建自动获取信息创建 Source、Sink 等实例。

04

近期规划

最后介绍一下 SeaTunnel 的近期规划。

SeaTunnel 作为一个数据集成平台,将不断专注于解决数据集成领域的需求和问题。我们希望支持数据源的数量更多,数据同步的性能更快,在易用性方面更好用,从这三方面不断迭代优化,以满足更多的用户需求。

1. V2 版本连接器数量翻一倍

  • 所有 Spark、Flink 连接器升级到 V2 版本

  • 连接器总数今年翻一倍,达到 80 以上

2. 发布 SeaTunnel Web 模块

  • 提供可视化作业管理

  • 支持编程式和引导式作业配置

  • 实现内部调度,以及第三方调度的集成

3. 发布 SeaTunnel Engine

  • 更省资源,将 JDBC 共享,节省连接数量,并且在执行端实现绿色线程、线程共享等技术,从而达到节省资源的目的

  • 更细粒度的容错,实现基于 Pipeline 级别的调度和容错

  • 更快

SeaTunnel Connector 接入激励计划是最近社区在做的一个活动。基于SeaTunnel Connector API 来实现,目前已经收集了 105 个数据源,当贡献者 PR 完成合并后,根据难易程度和优先级,会得到一些奖励。活动的目的是完善 SeaTunnel 生态。欢迎大家参与。

SeaTunnel 超大数据量数据集成平台设计_第15张图片

SeaTunnel 超大数据量数据集成平台设计_第16张图片

05

问答环节

Q1:在 Flink 实时同步下,可以做 Checkpoint 处理吗?

A1:可以。API 设计的时候考虑到了 Flink 分布式快照的机制,SeaTunnel可以完美兼容 Flink 分布式快照的流程。

Q2:DolphinScheduler 是怎么支持 SeaTunnel 的?

A2:DolphinScheduler 已经支持 SeaTunnel 的任务,即将发布的SeaTunnel Web 上的调度系统也会支持 DolphinScheduler。

今天的分享就到这里,谢谢大家。

你可能感兴趣的:(大数据,算法,机器学习,数据库,大数据,java)