乐趣区

关于android:未来源码什么是数据集成超全的SeaTunnel-集成工具介绍

以下文章来源于大数据与云原生技术分享,作者 liugp

举荐语:随着互联网流量爆发式增长,越来越多的公司业务须要撑持海量数据存储,对高并发、高可用、高可扩展性等个性提出了更高的要求。这也促使各种类型的数据库疾速倒退,至今常见数据库曾经达到 200 多个。与之相伴的便是,各种数据库之间的同步与转换需要激增,数据集成便成了大数据畛域的一个亟需解决的方向。以后市面上没有一个简略易用且反对每天数百亿条海量数据同步的开源软件,于是 SeaTunnel 应运而生。

SeaTunnel 是一个十分好用、超高性能的分布式数据集成平台,架构于 Apache Spark 和 Apache Flink 之上,实现了海量数据的实时同步与转换。每天能够稳固高效地同步数百亿数据,目前已靠近百家公司在生产上应用。

——MobTech 袤博科技政府产研部 Java 开发专家  竹石

一、什么是数据集成?


数据集成是指将来自不同数据源的数据整合到一起造成一个对立的数据集。这个过程包含从不同的数据源中收集数据,对数据进行荡涤、转换、重构和整合,以便可能在一个对立的数据仓库或数据湖中进行存储和治理。

  • 数据集成能够帮忙企业更好地了解和利用他们的数据,并促成数据驱动的决策和业务流程优化。在数据集成过程中,须要思考数据品质、数据安全性、数据格式、数据结构等方面的问题,并采纳适当的技术和工具来解决这些问题,例如 ETL(抽取、转换、加载)工具、数据映射工具、数据荡涤工具、数据建模工具等。
  • 个别数据集成用到的工具次要有:SqoopDataX、或是本章解说的 SeaTunnel,这三个工具都是数据转换集成工具,应用其中一个即可,其实也能够这样认为 Sqoop 是第一代,DataX 是第二代,SeaTunnel 是第三代工具,Sqoop 用的不是很多了,Datax 应该用的还是比拟多的,SeaTunnel 是 Apache 顶级我的项目,也是最新代的数据集成工具,有趣味的小伙追随我的文章一起理解 SeaTunnel 工具。想理解 Sqoop 和 DataX 小伙伴能够查阅我以下文章:
  • [大数据 Hadoop 之——数据同步工具 Sqoop]
  • [大数据 Hadoop 之——数据同步工具 DataX]

二、ETL 又是什么?

后面的文章其实讲过 ETL,这里只是再次回顾以下,ETL 中的 E 是extract,数据抽取;T 是 Transform,代表数据的转换;L 代表Load,数据加载。

三、SeaTunnel 介绍

1)概述

Apache SeaTunnel 是一个分布式、高性能、易扩大、用于海量数据(离线 & 实时)同步和转化的数据集成平台,每天可稳固高效地同步数百亿数据,并具备 已用于生产近 100 家公司。

  • SeaTunnel 官网:https://seatunnel.apache.org/
  • SeaTunnel GitHub:https://github.com/apache/incubator-seatunnel

SeaTunnel 工作流程图:

2)SeaTunnel 的作用

SeaTunnel 专一于数据集成和数据同步,次要针对解决数据集成畛域的常见问题:

  • 各种数据源:有数百个罕用数据源,其版本不兼容。随着新技术的呈现,更多的数据源正在呈现。用户很难找到可能齐全疾速反对这些数据源的工具。
  • 简单同步场景:数据同步须要反对离线 - 全量同步、离线 - 增量同步、CDC、实时同步、数据库全量同步等多种同步场景。
  • 资源需要高:现有的数据集成和数据同步工具往往须要大量的计算资源或 JDBC 连贯资源来实现海量小表的实时同步。这在肯定水平上减轻了企业的累赘。
  • 不足品质和监控:数据集成和同步过程常常会遇到数据失落或反复的状况。同步过程不足监控,无奈直观地理解工作过程中数据的真实情况。
  • 简单的技术栈:企业应用的技术组件不同,用户须要针对不同的组件开发相应的同步程序来实现数据集成。
  • 治理和保护难度大:受限于不同的底层技术组件(Flink/Spark),离线同步和实时同步往往离开开发和治理,减少了治理和保护的难度。

3)SeaTunnel 的特点

  • 丰盛且可扩大的连接器:SeaTunnel 提供了一个不依赖于特定执行引擎的连接器 API。基于此 API 开发的连接器(源、转换、接收器)能够在许多不同的引擎上运行,例如以后反对的 SeaTunnel 引擎、FlinkSpark
  • 连接器插件 :插件设计容许用户轻松开发本人的连接器并将其集成到 SeaTunnel 我的项目中。目前,SeaTunnel 曾经反对100 多个 连接器,而且数量还在激增。有列表 以后反对的连接器
  • 批量流集成 :基于 SeaTunnel 连接器 API 开发的连接器,完满兼容离线同步、实时同步、全同步、增量同步等场景。它大大降低了治理数据集成工作的难度。
    反对分布式快照算法,保证数据一致性。
  • 多引擎反对:SeaTunnel 默认应用 SeaTunnel 引擎进行数据同步。同时,SeaTunnel 还反对应用 Flink 或 Spark 作为连接器的执行引擎,以适应企业现有的技术组件。SeaTunnel 反对多个版本的 Spark 和 Flink。
  • JDBC 多路复用,数据库日志多表解析:SeaTunnel 反对多表或全数据库同步,解决了 JDBC 连贯过多的问题; 反对多表或全库日志读写解析,解决了 CDC 多表同步场景反复读取解析日志的问题。
  • 高吞吐、低时延 :SeaTunnel 反对并行读写,提供稳固牢靠的数据同步能力,高吞吐、低时延。
  • 欠缺的实时监控:SeaTunnel 反对数据同步过程中每个步骤的具体监控信息,让用户轻松理解同步工作读写的数据数量、数据大小、QPS 等信息。

4)Seatunnel 劣势与毛病

劣势

  • 简略易用,灵便配置,无需开发
  • 模块化和插件化
  • 反对利用 SQL 做数据处理和聚合
  • 因为其高度封装的计算引擎架构,能够很好的与中台进行交融,对外提供分布式计算能力

毛病

  • Spark 反对 2.2.0 – 2.4.8,不反对 spark3.x
  • Flink 反对 1.9.0,目前 flink 曾经迭代至 1.14.x,无奈向上兼容
  • Spark 作业尽管能够很快配置,但相干人员还须要懂一些参数的调优能力让作业效率更优

5)核心理念

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

  • 下层不依赖底层,两者都依赖形象;
  • 流程代码与业务逻辑应该拆散。整个数据处理过程,大抵能够分为以下几个流程:输出 -> 转换 -> 输入,对于更简单的数据处理,本质上也是这几种行为的组合:

四、架构演进

再看 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 到对应的计算引擎里。

最初做一下总结,进行 V1 和 V2 架构的降级比照,到底咱们做了哪些事件。

五、相干竞品及比照

SeaTunnel Engine 性能测试

比照的工具有大家耳熟能详的 DataX,袋鼠云的 Chunjun,可能对于 Chunjun 大家比拟生疏,实际上它没改名之前叫 FlinkX,以及最近刚进入 Apache 孵化器的 StreamPark(原名 StreamX)。

六、SeaTunnel 部署和简略应用

1)装置 JDK

下载地址(也可去官网下载):

链接:https://pan.baidu.com/s/1gOFkezOH-OfDcLbUmq6Dhw?pwd=szys
提取码:szys

# jdk 包在我上面提供的资源包里,当然你也能够去官网下载。tar -xf jdk-8u212-linux-x64.tar.gz# /etc/profile 文件中追加如下内容:echo "export JAVA_HOME=`pwd`/jdk1.8.0_212" >> /etc/profileecho "export PATH=\$JAVA_HOME/bin:\$PATH" >> /etc/profileecho "export CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar" >> /etc/profile# 加载失效 source /etc/profile

2)下载

export version="2.3.1"wget "https://archive.apache.org/dist/incubator/seatunnel/${version}/apache-seatunnel-incubating-${version}-bin.tar.gz"tar -xzvf "apache-seatunnel-incubating-${version}-bin.tar.gz"

3)装置接器插件

从 2.2.0-beta 开始,二进制包默认不提供连接器依赖,所以第一次应用时,咱们须要执行以下命令来装置连接器:(当然也能够手动下载连接器 [Apache Maven Repository](https://repo.maven.apache.org/maven2/org/apache/seatunnel/ 下载,而后手动挪动到连接器目录下的 Seatunnel 子目录)。

# config/plugin_config,能够批改这个配置指定下载连接器,会下载到这个目录下 connectors/seatunnel/cd apache-seatunnel-incubating-${version}sh bin/install-plugin.sh 2.3.1

4)疾速开始

config/v2.batch.conf.template

env {execution.parallelism = 1  job.mode = "BATCH"}source {FakeSource {      result_table_name = "fake"      row.num = 16      schema = {        fields {          name = "string"          age = "int"}      }    }}sink {Console {}}

启动应用程序:

cd "apache-seatunnel-incubating-${version}"# 连接器:connectors/seatunnel/connector-fake-2.3.1.jar./bin/seatunnel.sh --config ./config/v2.streaming.conf.template -e local

5)疾速开始应用 Flink

编辑 config/v2.streaming.conf.template,决定了海隧道启动后数据输出、解决和输入的形式和逻辑。上面是配置文件的示例,与下面提到的示例应用程序雷同。

env {execution.parallelism = 1  job.mode = "BATCH"}source {FakeSource {      result_table_name = "fake"      row.num = 16      schema = {        fields {          name = "string"          age = "int"}      }    }}sink {Console {}}

启动应用程序(Flink 版本之间 1.15.x 和 1.16.x):

cd "apache-seatunnel-incubating-${version}"./bin/start-seatunnel-flink-15-connector-v2.sh --config ./config/v2.streaming.conf.template

这里只是演示了官网文档里的简略示例,有趣味的话,能够去试验其它的数据转换场景。其实转换的思路跟之前的软件都是一样的,有任何疑难欢送给我留言,后续会更新相干技术类的文章,请小伙伴急躁期待,可关注我的公众号【大数据与云原生技术分享】加群交换或私信交换~

退出移动版