一、什么是数据集成?
数据集成是指将来自不同数据源的数据整合到一同形成一个统一的数据集。这个进程包括从不同的数据源中收集数据,对数据进行清洗、转化、重构和整合,以便能够在一个统一的数据仓库或数据湖中进行存储和办理。
-
数据集成能够帮助企业更好地了解和运用他们的数据,并促进数据驱动的决议计划和业务流程优化。在数据集成进程中,需求考虑数据质量、数据安全性、数据格式、数据结构等方面的问题,并采用恰当的技能和东西来处理这些问题,例如
ETL
(抽取、转化、加载)东西、数据映射东西、数据清洗东西、数据建模东西等。 -
一般数据集成用到的东西首要有:
Sqoop
、DataX
、或是本章解说的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 官网:seatunnel.apache.org/
- SeaTunnel GitHub:github.com/apache/incu…
SeaTunnel 工作流程图:
2)SeaTunnel 的效果
SeaTunnel专注于数据集成和数据同步,首要针对处理数据集成领域的常见问题:
-
各种数据源:有数百个常用数据源,其版别不兼容。随着新技能的呈现,更多的数据源正在呈现。用户很难找到能够彻底快速支撑这些数据源的东西。
-
杂乱同步场景:数据同步需求支撑离线-全量同步、离线-增量同步、CDC、实时同步、数据库全量同步等多种同步场景。
-
资源需求高:现有的数据集成和数据同步东西往往需求大量的核算资源或JDBC连接资源来完结海量小表的实时同步。这在一定程度上加剧了企业的负担。
-
缺乏质量和监控:数据集成和同步进程经常会遇到数据丢掉或重复的状况。同步进程缺乏监控,无法直观地了解使命进程中数据的真实状况。
-
杂乱的技能栈:企业运用的技能组件不同,用户需求针对不同的组件开发相应的同步程序来完结数据集成。
-
办理和保护难度大:受限于不同的底层技能组件(Flink/Spark),离线同步和实时同步往往分开开发和办理,增加了办理和保护的难度。
3)SeaTunnel 的特点
-
丰厚且可扩展的连接器:SeaTunnel 供给了一个不依靠于特定履行引擎的连接器 API。根据此 API 开发的连接器(源、转化、接收器)能够在许多不同的引擎上运行,例如当时支撑的 SeaTunnel 引擎、
Flink
、Spark
。 -
连接器插件:插件规划答应用户轻松开发自己的连接器并将其集成到 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 的路线发展。根据整个架构和规划哲学的评论,咱们能够在github.com/apache/incu… 看到,如果有爱好,能够去了解一下 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
下载地址(也可去官网下载):
链接:pan.baidu.com/s/1gOFkezOH… 提取码:
szys
# jdk包在我下面供给的资源包里,当然你也能够去官网下载。
tar -xf jdk-8u212-linux-x64.tar.gz
# /etc/profile文件中追加如下内容:
echo "export JAVA_HOME=`pwd`/jdk1.8.0_212" >> /etc/profile
echo "export PATH=\$JAVA_HOME/bin:\$PATH" >> /etc/profile
echo "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
这儿仅仅演示了官方文档里的简略示例,有爱好的话,能够去实验其它的数据转化场景。其实转化的思路跟之前的软件都是一样的,有任何疑问欢迎给我留言,后续会更新相关技能类的文章,请小伙伴耐性等待,可关注我的公众号【大数据与云原生技能分享】加群沟通或私信沟通~