Apache SeaTunnel在VIP 中的使用

2024-03-13 17:52
文章标签 使用 apache vip seatunnel

本文主要是介绍Apache SeaTunnel在VIP 中的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简介

SeaTunnel这款产品的中文翻译个人觉得非常契合产品定位,大多数翻译软件都会翻译成(海底隧道),SeaTunnel作为源 - 目的地的数据传输工具,其性能超越了市面上绝大多数的同步工具,后面会详细介绍性能

功能特点

  • 丰富且可扩展的Connector:SeaTunnel提供了不依赖于特定执行引擎的Connector API。基于该API开发的Connector(Source、Transform、Sink)可以运行在很多不同的引擎上,例如目前支持的SeaTunnel Engine、Flink、Spark等。

  • Connector插件:插件式设计让用户可以轻松开发自己的Connector并将其集成到SeaTunnel项目中。目前,SeaTunnel 支持超过 100 个连接器,并且数量正在激增。

  • 批流集成:基于SeaTunnel Connector API开发的Connector完美兼容离线同步、实时同步、全量同步、增量同步等场景。它们大大降低了管理数据集成任务的难度。

  • 支持分布式快照算法,保证数据一致性。

  • 多引擎支持:SeaTunnel默认使用SeaTunnel引擎进行数据同步。SeaTunnel还支持使用Flink或Spark作为Connector的执行引擎,以适应企业现有的技术组件。SeaTunnel 支持 Spark 和 Flink 的多个版本。

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

  • 高吞吐量、低延迟:SeaTunnel支持并行读写,提供稳定可靠的高吞吐量、低延迟的数据同步能力。

  • 完善的实时监控:SeaTunnel支持数据同步过程中每一步的详细监控信息,让用户轻松了解同步任务读写的数据数量、数据大小、QPS等信息。

  • 支持两种作业开发方法:编码和画布设计。SeaTunnel Web 项目提供作业、调度、运行和监控功能的可视化管理。

整体架构

当前稳定版本2.3.4

大厂使用案例

SeaTunnel在 VIP 中的使用

唯品会OLAP架构

底层数据仓库分为离线数据仓库、实时数据仓库、湖库。对于计算引擎,使用 Presto、Kylin 和 Clickhouse。基于OLAP组件,提供SQL数据服务以及唯品会的非SQL独立分析,服务于不同的智能。例如,非 SQL 服务是为 BI 和商业提供更贴近业务的数据分析的服务。多个数据应用被抽象在数据服务之上。

需求
  1. Hive 和 Clickhouse 之间有很多工作来实现导入和导出。数据导入导出需求是提高导入导出效率

  2. 需要使用Clickhouse进行离线OLAP计算加速

痛点
  1. Hive表的粒度是5分钟。有没有一个组件可以支持较短的ETL流程,并在五分钟内将ETL结果导入Clickhouse

  2. 我们要保证数据的质量,数据的准确性需要保证。Hive和Clickhouse中的数据条目数量需要保持一致。如果数据质量出现问题,能否通过重跑等机制修复数据

  3. 数据导入需要支持的数据类型是否齐全?不同数据库之间的数据类型和一些机制是不同的。我们有 HiperLogLog、BitMap 等数据类型,广泛应用于某个存储引擎。是否能正确传输、识别,并能正常使用。

根据数据业务的痛点,对数据仓库和仓库工具进行了对比和选择。主要比较DataX、SeaTunnel,并在三个选项中编写Spark程序并使用jdbc插入ClickHouse。SeaTunnel和Spark依托唯品会自有的Yarn集群,可以直接实现分布式读写。DataX是非分布式的,Reader和Writer之间的启动过程耗时较长,性能一般。SeaTunnel和Spark对于数据处理的性能可以达到DataX的数倍。超过10亿的数据可以在SeaTunnel和Spark中流畅运行。DataX在数据量大后性能压力很大,处理10亿以上的数据比较困难。在读写插件扩展性方面,SeaTunnel支持多种数据源,支持用户开发插件。SeaTunnel支持将数据导入到Redis中。稳定性方面,由于SeaTunnel和DataX都是自带工具,所以稳定性会更好。Spark 的稳定性方面需要关注代码质量。

数据导入导出
Hive 数据导入 Clickhouse

下图是一个Hive表,三级产品维度表,包括品类产品、维度类别、用户人群信息。该表的主键是一个三级类别ct_third_id,后面的值是两个uid的bitmap,即用户id的bitmap类型。需要将此 Hive 表导入 Clickhouse。

下图显示了SeaTunnel的配置。配置中,env、source、sink必不可少。env部分,图中的例子是Spark的配置。配置包括并发数等,这些参数是可以调整的。源部分是数据源。这里配置了Hive数据源,包括Hive Select语句。Spark运行源配置中的SQL来读取数据。这里支持UDF,用于简单的ETL;Sink部分配置ClickHouse,可以看到output_type=rowbinary,rowbinary是唯品会自研的加速方案;pre_sql和check_sql是自研函数,用于数据校验,后面会详细介绍;clickhouse.socket_timeout和bulk_size可以根据实际情况调整。

为了更好的契合业务,唯品会对SeaTunnel进行了一些改进。支持pre_sql和check_sql来实现数据重跑和对数。主要流程是数据准备好后执行pre_sql进行预处理,删除Clickhouse中旧的分区数据,存放到一个目录中,失败时恢复分区并重命名。check_sql会进行检查,检查通过后整个流程结束;如果检查失败,则根据配置重新运行,如果重新运行失败,则会提醒相应的负责人。

在SeaTunnel 1.0版本的基础上,唯品会增加了RowBinary进行加速,同时也让Hive中HeperLogLog和BinaryBitmap的二进制文件导入到Clickhouse中变得更加容易。对ClickHouse-jdbc、bulk_size、Hive-source 进行了更改。使用CK-jdbc的扩展api以rowbinary方式向CK写入数据。Bulk_size引入了rowbinary模式下写入CK的控制逻辑。Hive源RDD通过HashPartitioner进行分区,对数据进行打散,防止数据倾斜。还让 SeaTunnel 支持多种类型。为了圈住人群,需要在Clickhouse、Preso、Spark中实现相应的方法。我们在Clickhouse-jdbc中添加了支持Batch功能的Callback、HttpEntity和RowBinaryStream,在Clickhouse-jdbc和Clickhouse-sink代码中添加了位图类型映射,并在Presto和Spark中实现了Clickhouse的Hyperloglog和Bitmap功能的UDF。前面的配置中,clickhouse-sink部分可以指定表名,这里就是写入本地表和分布式表的区别。写入分布式表的性能比写入本地表的性能差,这会给Clickhouse集群带来更大的压力。但在曝光计、流量计、ABTest等场景下,需要两张表进行Join,而且两张表都是数十亿量级。。这时候我们希望Join key落在本机,Join代价更小。我们建表的时候,在Clickhouse的分布式表分发规则中配置了murmurHash64规则,然后直接在Seatunnel的sink中配置分布式表,将写入规则交给Clickhouse,利用分布式表的特性来进行写入。写入本地表会给Clickhouse带来较小的压力,写入的性能会更好。在Seatunnel中,我们根据sink的本地表去Clickhouse的System.cluster表中获取表分布信息以及机器分布主机。然后根据均衡规则写入这些主机。将数据的分布式写入放入Seatunnel中。对于本地表和分布式表的写入,我们未来的改造方向是在Seatunnel中实现一致性哈希,直接按照一定的规则写入,比如Clickhouse,而不依赖Clickhouse本身进行数据分发,改善Clickhouse的CPU负载高的问题。

调度系统整合

SeaTunnel与唯品会数据平台整合,每个公司都有自己的调度系统,比如Beluga、Zeus。 唯品会的调度工具是数方,调度工具集成了数据传输工具。 下面是调度系统的架构图,包括各类数据的进入和退出。

SeaTunnel 任务类型已集成到平台中。 图为书房定时任务截图。 您可以看到所选部分是已配置的 SeaTunnel 任务。 资源信息。 下面显示了历史运行实例信息。

将 SeaTunnel 集成到调度系统中。 数方调度Master会根据任务类型将任务分配给相应的Agent,并根据Agent的负载情况分配到合适的机器上运行。 控制器在前台拉取任务调度配置和信息。 到达后会生成一个SeaTunnel集群,并在类似于k8s pod和cgroup隔离的虚拟环境中执行。 运行结果将通过调度平台的数据质量监控来判断任务是否完成以及操作是否成功,如果失败则重新运行并报警。

SeaTunnel本身是一个基于工具的组件,用于管理和控制数据血缘关系、数据质量、历史记录、高警戒监控、资源分配等。 我们将SeaTunnel集成到平台中,我们可以利用平台来利用SeaTunnel的优势。 SeaTunnel 用于在存款人群中进行处理。 通过管理数据,我们将圈人根据其路径和使用情况划分为不同的人,或者千人千面,标记用户,将某类圈人推送给用户、分析师和供应商。

流量进入Kafka,通过Flink进入仓库,然后通过ETL形成用户标签表。用户标签表生成后,我们使用Presto实现的BitMap方法将数据打入Hive中的宽表中。用户在众包系统页面通过框选条目创建任务,提交至腾群,并生成SQL查询Clickhouse BitMap。Clickhouse的BitMap查询速度非常快。由于其先天的优势,我们需要通过SeaTunnel将Hive的BitMap表导入到Clickhouse中。人群圈完后,我们需要将表落地,形成Clickhouse的分区或者记录,然后将得到的BitMap表通过SeaTunnel存储到Hive中。最后,同步工具会将Hive的BitMap人群结果同步到外部媒体存储库Pika。每天大约有20w人被圈。整个过程中,SeaTunnel负责将Hive中的数据导出到Clickhouse。Clickhouse的ETL过程完成后,SeaTunnel将Clickhouse的数据导出到Hive。为了满足这个需求,我们在Presto和Spark上实现了ClickHouse的Hyperloglog和BitMap功能的UDF;我们还开发了 Seatunnel 接口,使得用户在 ClickHouse 中使用 Bitmap 方式圈出的人群可以通过 Seatunnel 直接写入 Hive 表中,无需中间登陆步骤。用户还可以通过spark调用SeaTunnel接口在Hive中圈出人群或者反转人群位图,这样数据就可以直接传输到ClickHouse结果表中,无需中间登陆

这篇关于Apache SeaTunnel在VIP 中的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/805693

相关文章

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

关于@MapperScan和@ComponentScan的使用问题

《关于@MapperScan和@ComponentScan的使用问题》文章介绍了在使用`@MapperScan`和`@ComponentScan`时可能会遇到的包扫描冲突问题,并提供了解决方法,同时,... 目录@MapperScan和@ComponentScan的使用问题报错如下原因解决办法课外拓展总结@

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学