Apache SeaTunnel快速入门及原理和实践(一)

一、概述

主要从以下6个方面进行:

  1. 对数据集成做一个简单的概括
  2. 对 SeaTunnel 做简单的介绍
  3. 介绍 SeaTunnel 当前的原理和架构演进
  4. 对当前市面上一些比较常见的数据集成工具进行对比,来解读一下现在市面上已经有了那么多数据集成工具,为什么我们还要再去“造轮子”
  5. 通过案例demo来展示一下SeaTunnel强大的能力
  6. 介绍 SeaTunnel 的 Roadmap,包括我们目前正在做的一些事情,以及未来想要做的一些事情。

二、数据集成概览

在对数据集成做概论之前,首先我们要提出一个问题,什么是数据集成? 从字面意义上来讲,数据集成就是把不同来源格式以及特点性质的数据在逻辑上或者物理上有机地进行集中,从而为企业提供全面的数据共享。企业可以通过高度集中的数据快速做出一系列的分析和决策,从而实现数据利用的价值。
在这里插入图片描述
实际上,一家公司每个业务部门负责的业务线是不一样的,每个业务部门每天都在产生数据,如果把这些数据做有效的集中和处理,那么企业可以通过这些数据获得更多的业务价值。
再抛出第二个问题,我们为什么要去做数据集成? 在企业中,由于开发时间或开发部门的不同,往往有多个异构的、运行在不同的软硬件平台上的信息系统同时运行,这些系统的数据源彼此独立、相互封闭,使得数据难以在系统之间交流、共享和融合,从而形成了 “信息孤岛“,数据集成可以有效合并和融合异构数据源,打破 ”信息孤岛”
在这里插入图片描述

以银行为例,银行可能有营销业务,同时还有信贷的业务,如果信贷业务想要去拿到营销业务那边的数据,是做不到的,因为可能不同的业务部门用的是不同的技术栈,有的数据是存在一些数据仓库里,比如 Greenplum 或 Oracle,有的数据存在 Hadoop 集群中,那么不同的数据库之前的数据如何进行共享?此时我们就需要数据集成层来做这个事情,我们去做一个中间层去把这些数据进行归一化和统一处理,并导入到对应的数据仓库当中。这样我们每一个的业务部门都会拿到其他部门的数据,更好的实现数据价值。
下面我们聊一下数据集成中的几个核心概念,也就是我们常说的 ETL ETL 中的 E 是extract,数据抽取;T 是 Transform,代表数据的转换;L 代表Load,数据加载。
在这里插入图片描述
ETL 代表了整个数据集成中最重要的三个步骤,在之前老的数据集成架构中,更多的是 ETL 架构,以 Flink 和Spark 分布式计算引擎为例,它们拥有非常强大的计算能力,同时还会在转换方面有很多方便易用的算子做一些数据的清洗和转换。

实际上整个的数据处理流程是将数据抽出来,然后在计算引擎端,也就是说在数据集成层去做数据转换,再把转换好的数据加载到目标 Sink 端。

这样做的弊端是什么?那就是当数据抽取量大时,所有的数据计算压力全都放在了数据集成层,会给数据集成层造成巨大的负担,因此我们需要更多的计算资源,而且计算过程中的容错也比较困难。

基于这些痛点,以及随着技术发展,Source 和 Sink 端数据库对应的算力提升,使用他们自带的计算能力对数据进行提前转换,效率会提高,渐渐地,数据集成的架构就从 ETL 变成了 ELT,把 T转换这部分的数据操作上推或者下移到对应的 Source 端或者 Sink 端。

这样做的好处,一是避免 Source 端和 Sink 端资源浪费,而且可以利用他们对自己保存的数据的优化,提升数据转换的效率。第二点,减轻数据集成中间层的压力,因为当数据抽出来之后,我们不需要再对数据进行转换,这样就会避免内存的损耗,直接把抽出来的数据加载到对应的目标端,会让数据集成更加纯粹,效率也会更高。

三、Apache SeaTunnel简介

再来看一下 SeaTunnel 究竟是做什么的。SeaTunnel 是一个非常易用的支持海量数据同步的超高性能分布式数据集成平台,由国人主导并捐赠给Apache基金会;SeaTunnel取名灵感来自于小说三体中无坚不摧的水滴,摧毁了人类的好几千艘战舰。
在这里插入图片描述
首先,SeaTunnel 最大的一个特点是简单易用,无需开发,用户可以通过学习配置文件,快速开发当前的数据任务。

第二个是在架构上做了批流一体的架构升级,现在我们既可以管理流作业,也可以管理批作业。
第三,实现了异构多数据源支持,从架构图中可以看到,SeaTunnel 可以支持 HDFS、Hive 、JDBC等类型的数据源,还有 Kafka、Plusar 等流式数据源,CDC 等。

同时,SeaTunnel 还支持多个计算引擎无缝接入,目前支持Spark2.4.X+、Flink1.13.X 版本的计算引擎,高版本的计算引擎支持在社区的发展 Roadmap 中,也期待更多有志之士加入到贡献中,让 SeaTunnel 变得更好。

另外,SeaTunnel 是模块化和插件化的设计,整个框架是通过 SPI 的方式,动态加载插件到框架中,如果企业有自定义需求,可以利用预留好的接口来快速实现符合自己业务需求的插件。

值得注意的是,SeaTunnel 目前已经发布了自研的计算引擎,这款计算引擎主要是针对缺乏一定大数据资源的用户,因为老架构 SeaTunnel 只能依靠 Spark 或者Flink 计算引擎才能跑起来。但目前 SeaTunnel 已经完全和计算引擎进行解构,并且自带计算引擎,极大地降低了 部署成本,提高了易用度。
最后,SeaTunnel 最大的特点就是目前已经无缝接入到 CDC,可以支持 CDC 同步。

四、原理和架构演进

接下来讲一讲 SeaTunnel 的内核原理和底层架构演进。

4.1核心理念

SeaTunnel 设计的核心是利用设计模式中的“控制翻转”或者叫“依赖注入”,主要概括为以下两点:

  1. 上层不依赖底层,两者都依赖抽象;
  2. 流程代码与业务逻辑应该分离。整个数据处理过程,大致可以分为以下几个流程:输入 -> 转换 ->
    输出,对于更复杂的数据处理,实质上也是这几种行为的组合:

在这里插入图片描述
这三个名词是不是很熟悉?它其实就代表了我们刚才讲的数据集成里面核心的几个概念,ETL 就是基于这些高度抽象的行为,再丰富自己的插件,自定义业务处理流程。
那么我们在丰富了这些数据处理流程之后,就可以去通过这三种行为去组合出不同的有向无环图来丰富整个数据处理的流程。

4.2 内核原理

接下来聊一聊 SeaTunnel 的内核原理,实际上 SeaTunnel 将数据处理的各种行为抽象成 Plugin,并使用 Java SPI 技术进行动态注册,设计思路保证了框架的灵活扩展,在以上理论基础上,数据的转换与处理还需要做统一的抽象,譬如比较有名异构数据源同步工具 DataX,也同样对数据单条记录做了统一抽象。
在 SeaTunnel 架构体系中,由于背靠 Spark 和 Flink 两大分布式计算框架,框架已经为我们做好了数据源抽象的工作,Flink 的 DataStream、Spark 的 DataFrame 已经是对接入数据源的高度抽象,在此基础上我们只需要在插件中处理这些数据抽象即可,同时借助于 Flink 和 Spark 提供的 SQL 接口,还可以将每一次处理完的数据注册成表,方便用 SQL 进行处理,减少代码的开发量;在最新 SeaTunnel 的架构中,SeaTunnel 做了自己的类型抽象,实现了与引擎解耦的目的。

4.3 架构演化

再看 SeaTunnel 架构演进的过程,我们现在目前在做的一个事情就是从 v1 到 v2的架构改造和升级。
在这里插入图片描述
对于 V1 版本来讲,SeaTunnel 本质上是一个 ETL平台。而 V2 版本则向 ELT 的路线发展。基于整个架构和设计哲学的讨论,我们可以在https://github.com/apache/incubator-seatunnel/issues/1608 看到,如果有兴趣,可以去了解一下 SeaTunnel 架构演进的前世今生。

V1 架构
在这里插入图片描述
V1 架构中,SeaTunnel 的连接器和异构数据都是强依赖分布式计算引擎的,对于不同的计算引擎,会有不同的一个 API 层,连接器也都依赖着 Spark 和 Flink,已经开发好的连接器本质上也都是 Spark connector 和 Flink connecter。
接入数据之后,再去对接入进来的数据进行转换,然后再进行写出。这套设计哲学虽然代码开发量很少,而且很多细节都不需要考虑,因为现在开源的 Spark、Flink的 connecotor 都已经给我们解决了大多数的问题,但实际上这也是一种弊端。第一,强依赖计算引擎,我们无法做到解耦,而且每当计算引擎做大版本升级的时候,就需要进行大量的底层改造,难度比较大。

V2 架构
在这里插入图片描述
基于这些痛点,对 V 2 版本进行了重构。首先,V2 版本有了自己的一套API,也是有了自己的一套数据类型,就可以去开发自己的连接器,而不依赖任何引擎,接入的每一条数据都是 SeaTunnelRow,通过翻译层,把 SeaTunnelRow push 到对应的计算引擎里。

从底层来讲,我们实现是统一的,为适配不同的引擎版本,只需要开发不同的翻译层即可。即使引擎进行了大规模的 API 升级改造,也只需要再新建翻译层就好了,老版本丝毫不影响,这也是 V2 版本最大的亮点。

除了这点之外,我们还正在 V2 架构上做对应的 web 服务化工作,有一些设想,首先会有 job IDE,也就是说会有一个 job 编辑的页面,会有智能提示、数据源管理等一系列高级功能。第二,是会有 job designer 高级设计版本功能,可以通过不同的数据源参数替换,或者根据不同的需求来去实现,由一个 template 生成多个作业。

同时,我们还在规划自己的 scheduler。社区目前已经实现了 Apache DolphinScheduler 的接入,这个版本在不久的将来就会和大家见面。

最后一块也是我们整个服务化阶段比较重要的一环,就是要做自己的 Alert,以及对应的 Matrix 系统,去做好作业报警,作业指标的收集和推送,完整地管理作业流程。
最后做一下总结,进行 V1 和 V2 架构的升级对比,到底我们做了哪些事情。
在这里插入图片描述
首先在引擎依赖方面,V1 强依赖 Spark 和 Flink,V2 无依赖,且自带计算引擎,直接去部署就可以用了。

第二,在连接器实现方面,V1 针对不同的引擎可能要实现多次,V2 我们用自己的API 就只需实现一遍。

第三,V1 引擎版本升级比较困难,因为底层 API 是与引擎高度耦合的,V2 引擎版本升级比较容易,因为我们已经和引擎进行解耦,针对不同版本开发不同的翻译层即可。连接器参数统一方面,V1 针对不同引擎会有不同的参数,这也是 V1 被吐槽的一个点, V2 解决了这个痛点,所有的参数和特性都是统一的,减少用户的使用和学习成本。

最后,自定义分片逻辑上,在 V1 架构下,因为是强依赖 Spark 和 Flink 的connector,底层都已经实现好了一些分片逻辑,数据抽取效率不高,而且分片逻辑也改不了,除非改 Spark 的源码,再重新编译。对于这个痛点, V2 可以自定义分片逻辑,我们可以自由地发挥自己的想象力,数据抽取效率也是可控的,我们可以根据不同的业务需求进行修改。

4.4 V2架构新特性

架构升级之后,V2 架构有了一些新特性。

  • 多版本、多引擎支持
  • 支持多个版本的Flink引擎,完美支持Flink的Checkpoint流程
  • 支持Spark微批处理模式,支持聚合提交特性
  • 自研引擎 SeaTunnel Engine,专为数据同步场景设计的引擎,SeaTunnel
    内部自带引擎,为那些没有大数据生态的企业或追求数据同步最佳体验的用户提供可选方案

基于这些特性之下,SeaTunnel 实现了三点,首先SeaTunnel 支持Source/Transform/Sink 的并行化处理,提高吞吐性能。第二,支持分布式快照算法,两阶段提交、幂等写入,实现从 Source 到 Sink 端的 exactly once 精确一次性语义,而且还能保证不丢数据,断点续传等高级功能。第三,基于引擎提供的实时处理或微批处理实现低延迟。

3.5 SeaTunnel Engine性能测试

在这里插入图片描述
我们还与 DataX 进行了一个性能测试对比 ,在相同的千万级别作业量下,我们对比了不同并发、堆内存下的表现,结果显示 SeaTunnel Engine 的用时明显小于 DataX,尤其在 200 兆小内存的情况下,SeaTunnel Engine表现非常好,性能比DataX 提升了30~40%。

五 数据集成工具对比

下面对我们常见的一些数据集成工具进行对比,也是回答一下大家的疑问,就是我们为什么要去重新造轮子。

对比的工具有大家耳熟能详的 DataX,袋鼠云的Chunjun,可能对于Chunjun大家比较陌生,实际上它没改名之前叫 FlinkX,以及最近刚进入 Apache 孵化器的 StreamPark(原名 StreamX)。
在这里插入图片描述
首先从定位上来讲,Apache SeaTunnel 的定位是一个数据集成平台,而不只是简单的工具,后续会提供很多平台服务化完善作业流程和作业生命周期。而 DataX 和 Chunjun 目前还只是工具,没有提供服务化的东西。

这三者都是以 ELT 为核心的数据同步工具或平台。StreamPark的定位是一个 ETL 作业管理开发平台,主要分为两部分,一部分是对Flink 作业的管理,第二部分是提供一些快速的开发的 SDK 来减轻开发者的开发压力。

用 StreamPark 提供的 SDK,你就可以快速去做 Flink 作业或者 Spark作业,来减少代码的开发量,从定位上来讲这是不一样的。

第二,从引擎依赖上讲,SeaTunnel 已经对引擎进行解耦,我们可以选用自己的引擎,包括 Spark 引擎或者 Flink 引擎。但对于DataX来讲,它也是没有引擎依赖的,因为DataX是纯 Java 开发的,也就是你把它安装包一下,然后部署好就可以跑了,前提是有 Java 环境。

Chunjun 是强依赖Flink 的,它需要基于 Flink 的组件进行二次开发和Connector优化。

StreamPark 的定位是开发管理平台,对引擎也是有依赖的。从引擎版本支持来看,SeaTunnel 目前仅支持 Spark 2.2.X – 2.4.X,Spark 3 正在支持中,Flink 目前支持 1.10.X – Flink 1.13.X,高版本支持也在测试稳定性中,因为 Flink 高版本的 API 升级相应改造比较麻烦。

DataX 因为没有引擎依赖,是纯 Java 版本的,所以对引擎版本没有要求。

Chunjun 目前支持 Flink1.8.X – Flink1.12.X,高版本支持较差,升级改造正在进行中。

StreamPark 在这块做得很好,支持管理Flink 1.16作业,对 Spark的作业管理也在开发中。

从部署难度维度来看,SeaTunnel、DataX 和 Chunjun 三者部署都比较容易,因为不涉及后端和前端的部署,或数据库的需求,本质上它们就是一个工具,把安装包下载好了之后,有了 Java 环境,把环境变量配好,就可以去运行了。

对于 StreamPark ,因为是一个前后端的项目,所以在部署上有一定难度,需要一定的运维成本。在精确一次性语义方面,因为 SeaTunnel 在 V2 架构完美支持了 Flink 的 checkpoint流程,同时在ST Engine中也支持了更细粒度的checkpoint,所以部分连接器支持一次性语义,而 DataX 不支持。
Chunjun 因为也是依赖于Flink 的 checkpoint,所以也是支持一次性语义的。StreamPark 本身就是一个 ETL 作业的开发管理平台,可以保证作业的正常状态,并不支持数据同步或数据处理。

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

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

相关文章

Django Web框架——01

目录 文章目录 目录 Django框架的介绍起源&现状Django的安装 创建Django项目创建项目的指令Django项目的目录结构settings.py 文件介绍 URL 介绍URL定义Django如何处理一个URL对应的请求视图函数(view) Django 路由配置path() 函数path转换器 re_path()函数 HTTP协议的请求…

CoAP——Libcoap安装和使用(Ubuntu22.04)

1、简介 CoAP(Constrained Application Protocol)是一种专为受限设备和网络设计的应用层协议。它类似于HTTP,但具有更轻量级的特性,适合用于物联网(IoT)环境中的低功耗和低带宽设备。Libcoap是一个轻量级的…

云计算实训12——配置web服务器、配置客户端服务器、配置DNS服务、实现DNS域名解析

一、配置web服务器 准备操作 首先在正式配置之前需要做以下操作 关闭防火墙 systemctl stop firewalld 永久关闭防火墙 systemctl disable firewalld 关闭selinux setenforce 0 永久关闭selinux vim /etc/selinux/config selinuxpermissive 还需要保证能够正常ping通www.bai…

【SpingCloud】客户端与服务端负载均衡机制,微服务负载均衡NacosLoadBalancer, 拓展:OSI七层网络模型

客户端与服务端负载均衡机制 可能有第一次听说集群和负载均衡,所以呢,我们先来做一个介绍,然后再聊服务端与客户端的负载均衡区别。 集群与负载均衡 负载均衡是基于集群的,如果没有集群,则没有负载均衡这一个说法。 …

有哪些好用的 AI 学术研究工具和科研工具?

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ AI 应用其实分两个层面,第一是模型,第二是应用。现在很多模型厂家都是既做 toC 的对话应用,也做 t…

GD 32 流水灯

前言: 通过后面的学习掌握了一些逻辑架构的知识,通过复习的方式将学到的裸机任务架构的知识运用起来,同时巩固前面学到的知识,GPIO的配置等。 开发板上LED引脚使用示意图 注:此次LED灯的点亮凡是是高电平点亮&#xff…

好用的电脑屏幕监控软件推荐,什么软件能够监控电脑?

在当今信息化时代,电脑屏幕监控软件成为了企业管理、家长监管以及教育培训等领域的必备工具。通过实时监控电脑屏幕,这类软件可以有效提高工作效率,防止信息泄露,保障网络安全。本文将详细盘点几款主流的电脑屏幕监控软件&#xf…

Linux shell编程学习笔记66:ping命令 超详细的选项说明

0 前言 网络信息是电脑网络信息安全检查中的一块重要内容,Linux和基于Linux的操作系统,提供了很多的网络命令,今天我们研究最常用的ping命令。 1 ping命令 的功能、格式和选项说明 1.1 ping命令 的功能 简单来说, ping 命令 会…

全网最适合入门的面向对象编程教程:23 类和对象的 Python 实现-抛出异常

全网最适合入门的面向对象编程教程:23 类和对象的 Python 实现-抛出异常 摘要: 本文主要介绍了在使用Python面向对象编程时,抛出异常的应用场景、raise语句的使用方法和raise语句语法格式,并举出相应示例辅助讲解。 原文链接&am…

【PyTorch】图像二分类项目

【PyTorch】图像二分类项目 【PyTorch】图像二分类项目-部署 【PyTorch】图像多分类项目 【PyTorch】图像多分类项目部署 图像分类是计算机视觉中的一项重要任务。在此任务中,我们假设每张图像只包含一个主对象。在这里,我们的目标是对主要对象进行分类。…

检索增强生成Retrieval-Augmented Generation(RAG)简介

检索增强生成Retrieval-Augmented Generation(RAG)简介 引言 在自然语言处理领域,生成式任务(如文本生成、机器翻译等)一直备受关注。传统的生成模型如GPT、BERT等虽然取得了显著成果,但在处理长文本、知…

C#数组复习

一、一维数组 using System.Collections; using System.Collections.Generic; using UnityEngine;public class ShuZu : MonoBehaviour {#region 知识点一 基本概念//数组是存储一组相同类型数据的集合//数组分为 一维、二维、交错数组//一般情况 一维数组 就简称为数组#en…

OpenAI从GPT-4V到GPT-4O,再到GPT-4OMini简介

OpenAI从GPT-4V到GPT-4O,再到GPT-4OMini简介 一、引言 在人工智能领域,OpenAI的GPT系列模型一直是自然语言处理的标杆。随着技术的不断进步,OpenAI推出了多个版本的GPT模型,包括视觉增强的GPT-4V(GPT-4 with Vision&…

PeRF: Preemption-enabled RDMA Framework——论文泛读

ATC 2024 Paper 论文阅读笔记整理 问题 远程直接内存访问(RDMA)为数据密集型应用程序提供了高吞吐量、低延迟和最小的CPU使用率。各种数据密集型应用程序,如大数据分析[4,5]、机器学习[2,11,15,33]、分布式存储[21,27,28,41]和键值存储[20,…

[用AI日进斗金系列]用码上飞在企微接单开发一个项目管理系统!

今天是【日进斗金】系列的第二期文章。 先给不了解这个系列的朋友们介绍一下,在这个系列的文章中,我们将会在企微的工作台的“需求发布页面”中寻找有软件开发需求的用户 并通过自研的L4级自动化智能软件开发平台「码上飞CodeFlying」让AI生成应用以解…

基于面向对象重构模型训练器

引言 深度学习领域我们常用jupyter来演练代码,但实际生产环境中不可能像jupyter一样,所有代码逻辑都在面向过程编程,这会导致代码可复用性差,维护难度高。 前面这篇文章 基于pytorch可视化重学线性回归模型 已经封装了数据加载器…

leetcode 116. 填充每个节点的下一个右侧节点指针

leetcode 116. 填充每个节点的下一个右侧节点指针 题目 给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下: struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next …

STM32 智能家居自动化控制系统教程

目录 引言环境准备智能家居自动化控制系统基础代码实现:实现智能家居自动化控制系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:家居控制与优化问题解决方案与优化收尾与总结 1. 引言 智能家…

【第一天】计算机网络 TCP/IP模型和OSI模型,从输入URL到页面显示发生了什么

TCP/IP模型和OSI模型 这两个模型属于计算机网络的体系结构。 OSI模型是七层模型,从上到下包括: 应用层,表示层,会话层,传输层,网络层,数据链路层,物理层 TCP/IP模型是四层模型&…

谷粒商城实战笔记-52~53-商品服务-API-三级分类-新增-修改

文章目录 一,52-商品服务-API-三级分类-新增-新增效果完成1,点击Append按钮,显示弹窗2,测试完整代码 二,53-商品服务-API-三级分类-修改-修改效果完成1,添加Edit按钮并绑定事件2,修改弹窗确定按…