陈胡:Apache SeaTunnel实现 非CDC数据抽取实践(DataFunTalk)

科技资讯 投稿 60000 0 评论

陈胡:Apache SeaTunnel实现 非CDC数据抽取实践(DataFunTalk)

随着全球数据量的不断增长,越来越多的业务需要支撑高并发、高可用、可扩展、以及海量的数据存储,在这种情况下,适应各种场景的数据存储技术也不断的产生和发展。与此同时,各种数据库之间的同步与转化的需求也不断增多,数据集成成为大数据领域的热门方向,于是SeaTunnel应运而生。SeaTunnel是一个分布式、高性能、易扩展、易使用、用于海量数据(支持实时流式和离线批处理)同步和转化的数据集成平台,架构于Apache Spark和Apache Flink之上。本文主要介绍SeaTunnel 1.X在交管行业中的应用,以及其中如何实现从Oracle数据库把数据增量导入数仓这样一个具体的场景。

  • SeaTunnel简介

  • SeaTunnel应用场景

  • 相关业务痛点

  • 选择SeaTunnel的原因

  • 具体实现方案

  • 具体实现流程

--

01 SeaTunnel简介

1. Apache SeaTunnel整体介绍

互联网行业数据量非常大,对性能还有其他各方面的技术要求都非常高,在笔者所在的交管行业中,情况就不太一样,各方面的要求也没有互联网行业那么高,在具体的数据集成应用中,主要是使用SeaTunnel1.X版本。

Apache Spark对于分布式数据处理来说是一个伟大的进步,但是直接使用Spark框架还是有一定门槛的,SeaTunnel这个产品把业界使用Spark的优质经验固化到了其中,明显降低了学习成本,加快分布式数据处理能力在生产环境中落地。在SeaTunnel2.X版本中,除了Spark,也增加了对Flink的支持。

  • 数据丢失与重复

  • 数据集成中任务堆积与延迟

  • 数据同步较低的吞吐量

  • Spark/Flink应用到生产环境周期较长、复杂度较高

  • 缺少应用运行状态的监控

2. Apache SeaTunnel技术特性

  • 简单易用,开发配置简单、灵活,无需编码开发,支持通过SQL进行数据处理和聚合,使用成本低

  • 分布式,高性能,经历大规模生产环境使用和海量数据检验,成熟稳定

  • 模块化和插件化,内置丰富插件,并且可以开发定制个性化插件,支持热插拔,具备高扩展性

  • 使用Spark/Flink作为底层数据同步引擎使其具备分布式执行能力

3. Apache SeaTunnel工作流程

SeaTunnel的架构和整个工作流程如下图所示,Input/Source [数据源输入] -> Filter/Transform [数据处理] -> Output/Sink [结果输出],数据处理流水线由多个过滤器构成,以满足多种数据处理需求。如果用户习惯了SQL,也可以直接使用SQL构建数据处理管道,更加简单高效。目前,SeaTunnel支持的过滤器列表也在扩展中。I

    nput/Source 插件

Fake, File, Hive/Hdfs, Kafka, Jdbc, ClickHouse, TiDB, HBase, Kudu, S3, Socket, 自行开发的Input插件

    Filter/Transform 插件
    Output/Sink 插件

Elasticsearch, File, Hdfs, Jdbc, Kafka, Mysql, ClickHouse, Stdout, 自行开发的Output 插件

4. Apache SeaTunnel环境依赖

5. Apache SeaTunnel用户使用情况

02 SeaTunnel应用场景

SeaTunnel特别适合以下场景使用:

  • 海量数据集成和ETL

  • 海量数据聚合

  • 多源数据处理

1. 交管行业数据简介

在交管行业中,数据主要包括驾驶人、车辆相关的数据,平时在道路上发生的一些交通警情数据,交通违法数据,机动车登记信息,执勤执法的数据,交通事故以及其他一些互联网数据,这些数据的量不是很大,另外还有卡口过车、车辆GPS数据,这两种数据的数据量都比较大,例如一些省会城市,每秒钟至少有几千条过车数据,这些数据都是属于交管行业内的数据。

2. 交管行业数据特点

03 相关业务痛点

1. 数据抽取限制较多

在做业务的过程中,会有一些业务痛点,首先因为交管行业是政府行业,基本各个子平台的数据都是存储在Oracle数据库中的,我们需要把数据从Oracle数据库中抽取到我们的数仓里面,出于安全性的考虑,无法得到用户级别的权限,我们只能通过一些视图级别的用户权限去处理数据,对于数据源表结构的变更也无法及时知晓。其次,会话数是受到限制的,多线程抽取数据的话,如果会话数达到上限,连接就会受到影响,而且这个分配的用户也同时会用于其他用途。最后,我们在处理一些增量数据的时候,一般情况下需要一个增量列,用于保持一个增量更新,很多时候,是没办法确定哪些列可以作为增量列的。以上就是在做业务的过程中,经常会遇到的一些问题,下图也把这些问题列举了出来。

04 选择SeaTunnel的原因

最初的时候,做数据处理、数据抽取的时候,并没有使用SeaTunnel,而是使用Apache NiFi,这个工具功能比较强大而且全面,但是NiFi中用于数据处理的处理器比较多,而且数据处理链路中要做很多转换,所以需要对NiFi里面的各种组件要非常熟悉,对使用者的要求也比较高。

1. SeaTunnel的优势

SeaTunnel无需编程,只要做简单的配置,并且它的Source和Sink都比较丰富,并且可以自己根据接口开发需要的插件,对数据源的权限要求也不高。

2. SeaTunnel的安装部署

3. SeaTunnel配置文件

下图所示是一个配置文件的示例,这个配置文件是SeaTunnel1.X版本的一个配置,一个完整的SeaTunnel配置包含spark, input, filter, output四部分,其中spark是spark相关的配置,例如,启动多少个executor,每个 executor使用多少核数的CPU,多少内存等,input可配置任意的input插件及其参数,具体参数随不同的input插件而变化,filter可配置任意的filter插件及其参数,具体参数随不同的filter插件而变化,filter中的多个插件按配置顺序形成了数据处理的pipeline, 上一个filter的输出是下一个filter的输入,通过input插件把数据取出,成为了spark里面的一个数据集,然后filter插件会对这个数据集做一些转换操作,output可配置任意的output插件及其参数,具体参数随不同的output插件而变化,filter处理完的数据,会发送给output中配置的每个插件

4. SeaTunnel插件支持

05 具体实现方案

1. 数据增量更新具体实现

当需要实现一个增量更新的时候,首先就是增量列的选择,之前提到原先是用NiFi来做增量更新,但是对增量列的支持不是特别好,尤其是对日期类型的支持不是很好。但是SeaTunnel对增量列的支持不受列的类型限制,可以比较灵活的进行选择。

2. 具体方法

--

06 具体实现流程

1. 确定运算资源

首先,如下图所示,先要确定计算资源,这里使用了spark,并且针对spark做了相关的配置。

2. 确定数据来源

3. 数据转换

4. 数据输出

5. 脚本和调度执行

本文首发于微信公众号“DataFunTalk”。

编程笔记 » 陈胡:Apache SeaTunnel实现 非CDC数据抽取实践(DataFunTalk)

赞同 (21) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽