作者:史德昇

随着数据来源的不断复杂化及业务需求的快速演进,通用的数据集成框架在实际落地过程中往往面临诸多挑战:数据结构不规范、字段缺失、敏感信息混杂、数据语义不清等问题频繁出现。为了更好地应对这些复杂场景,某上市网络安全龙头企业基于 Apache SeaTunnel 进行了二次开发,构建了一套可扩展、易维护且具备复杂场景的数据处理与智能容错机制。本文将围绕实际功能扩展与设计理念,全面介绍相关技术实现。

直播视频回放:【基于Apache SeaTunnel二次开发-面向复杂场景的数据处理与错误处理机制_史德昇】 https://www.bilibili.com/video/BV1Q6jwzDEBc/?share_source=cop...

作者简介

史德昇 某上市网络安全龙头企业 高级大数据工程师 专注于网络安全数据分析仓库的建设,负责ETL架构优化、组件扩展、以及面对亿万级数据的复杂问题解决和数据规范制定。
file

一、背景与痛点

在实际的业务场景中,我们面对的数据来源高度异构,包括但不限于日志文件、FTP/SFTP 文件、Kafka 消息、数据库变更等。数据本身可能结构不一,甚至是非结构化文本或半结构化的 XML 格式。以下问题尤为突出:

  • 复杂数据解析能力不足:面对复杂的数据如xml、key-value、不规则的数据无法解析入库
  • 缺少数据补全、字典翻译能力:在需要对原始日志进行资产信息补全时,无法补全,数据不完整,缺少关键信息,导致数据分析能力不足,无法挖掘出数据的价值
  • 文件读取模式有限:无法实时捕获和解析新增日志,导致安全威胁检测延迟,不能实时分析,后续功能和系统失去预警价值
  • 异常处理机制薄弱:在任务运行过程中,数据发送方可能变更日志,但是未通知数据接收方,导致任务中断,在未接到日志变更的通知时,很难快速定位并解决问题

二、新特性:基于SeaTunnel的处理与转换能力扩展

为应对上述复杂场景,我们基于 SeaTunnel 构建了多个 Transform 插件,用于对数据进行解析、补全、脱敏、字典翻译、转换等处理。

file

以下是主要能力说明:

1. 正则解析(Regex Transform)

用于结构化或半结构化文本字段的解析。通过配置正则表达式并指定分组映射关系,可以将原始文本拆分为多个业务字段。此方式广泛应用于日志解析和字段拆分等场景。

file

核心参数说明:

  • source_field: 需要解析的原始字段
  • regex: 正则表达式,例如 (\d+)-(\w+)
  • groupMap: 解析的结果字段与正则捕获组索引的对应关系

file

2. XML 解析

借助 VTD-XML 解析器,结合 XPath 表达式精准提取 XML 节点、属性与文本内容,转化为结构化数据。

file

核心参数说明:

  • pathMap: 每个结果字段与需要属性对应的 XPath 路径
  • source_field: XML 字符串字段名

file

3. Key-Value 解析

将形如 "key1=value1;key2=value2" 的字符串解析为结构化字段。支持配置键值与字段分隔符。
file

核心参数说明:

  • source_field:上游key-value值字段
  • field_delimiter: 键值对分隔符(如 ;)
  • kv_delimiter: 键和值的分隔符(如 =)
  • fields: 映射的目标字段key集合
    file

4. 数据动态补全(Lookup Enrichment)

通过辅助数据流或字典表,动态补齐缺失字段。例如补全设备资产信息、用户属性等。

file

实现要点:

  • 支持基于关键字段关联外部数据源
  • 本地缓存提升查找性能
  • 可配置定时刷新缓存数据时间

file

5. IP 地址补全

通过本地集成 IP2Location 数据库,从 IP 字段推导出国家、城市、区域等地理信息。

file

参数说明:

  • ip_field: IP 源字段
  • output_fields: 需要提取的地理字段(如国家、城市)

file

6. 数据脱敏(Data Masking)

对手机号、身份证、邮箱、IP 地址等敏感信息进行脱敏,支持多种脱敏规则(掩码、模糊替换等),确保隐私合规性。

file

常见脱敏策略:

  • 手机号中间四位掩码:138****8888
  • 邮箱账号名掩码:x***@domain.com
  • IP 地址掩码:192.168.*.*

file

7. 字典翻译

将编码值转换为业务语义(如性别代码 1 => 2 => ),提高数据可读性与报表质量。

file

支持来源:

  • 配置 JSON 格式的字符串数据
  • 引用具有字典内容的 TEXT 的文件

file

8. SFTP/FTP 增量读取能力扩展

SeaTunnel 原生已具备读取远程文件能力,但在增量拉取、断点续传、多线程消费方面仍有优化空间。我们扩展了如下能力:

file

  • 基于文件修改时间的增量判断:自动检测新变动文件
  • 线程池扫描触发机制:定时任务调度文件拉取
  • 多消费者、多消费模式并发处理:提升处理吞吐量并避免重复消费
  • 读取偏移记录与断点续传:确保失败重试场景不丢数据
  • 日志与健康状态监测:支持实时告警和日志记录
  • 历史文件清理策略:按保留天数自动清理老旧数据

性能测试(实测数据):

  • 数据量:1000 万条,目标表字段数:72
  • Kafka 吞吐量:5.5 万条/秒
  • 环境配置:

    • Kafka、SeaTunnel、ClickHouse 均为单机部署
    • OS:CentOS 7,CPU:8 核 16 线程,内存:32G
    • SeaTunnel JVM:-Xms1G -Xmx1G

file

三、组件开发案例分享

SeaTunnel的数据处理与转换API通过抽象类和接口定义了转换操作的基本框架和行为,具体的转换操作类通过继承和实现这些抽象类和接口,完成特定的数据转换逻辑。这种设计使得SeaTunnel的转换操作具有良好的扩展性和灵活性。

SeaTunnel Transform API 架构解析

file

1. SeaTunnelTransform(接口)

  • 类型:接口(Interface)
  • 作用:作为 transform 插件的顶层接口,定义了从 source 源读取数据并进行转换的统一入口。
  • 核心方法

    • map(): 子类需实现该抽象方法,用于将原始数据转换为新的结构。
    • getProducedCatalogTable(): 返回转换后的数据表结构信息,确保与 map 返回数据结构一致。

2. AbstractSeaTunnelTransform(抽象类)

  • 类型:抽象类(Abstract Class)
  • 作用:实现了 SeaTunnelTransform 接口,并封装了通用逻辑。
  • 功能:统一了 transform() 的处理流程,子类只需关注具体转换逻辑即可。

3. AbstractCatalogSupportTransform(抽象类)

  • 类型:抽象类(Abstract Class)
  • 作用:在继承上一层抽象逻辑的基础上,进一步抽象了字段映射与数据结构转换。
  • 功能:提供统一的字段映射和 Catalog 映射支持,便于与元数据系统集成。

4. RegexParseTransformSplitTransform 等(具体类)

  • 类型:具体实现类(Concrete Class)
  • 作用:实现 transformRow()transformTableSchema() 方法,定义每条数据的具体转换逻辑和输出结构。
  • 功能:这些类代表了用户自定义的转换规则,如正则解析、字段分割等。

file

基于Apache SeaTunnel的高效可拓展的Transform机制,我们进行了上述组件开发。接下来通过2个案例,我们来分析一下拓展的新特性为我们所带来的新能力。

案例1:正则解析能力

  • 需求与背景:

    • 互联网公司需要接入主机登录日志,进行暴力破解、帐号盗用、借用等用户异常行为分析
    • 样例数据:【2023-08-15 14:23:45 [ERROR] 192.168.1.1 - Login failed for user zhangsan】。

      • 日志特点:格式复杂,多关键信息柔和在一起,格式不统一缺乏固定字段分隔符
      • 解决方案:构建基于正则表达式的日志解析功能,动态识别和提取不规则日志(log文件日志、主机日志、程序运行日志)中的关键信息,将非结构化日志内容转化为结构化数据
  • 解决过程:
  1. 确定需要解析的上游字段(field)
  2. 编写正则表达式(regex)。通过配置文件定义正则表达式模式,其中使用捕获组(capture group)标识需要提取的关键数据片段
  3. 确定结果字段与正则捕获组的对应关系(groupMap)。seatunnel读取原始数据后,会逐行应用预定义的正则表达式进行模式匹配,自动提取各捕获组对应的数据内容,并将这些提取结果映射到预先配置的目标字段中

file

案例2:数据动态补全能力

  • 需求与背景

    • 某银行需要接入客户交易数据,但是给的原始数据中缺乏交易用途、收款方名称等关键信息,影响了后续的风险监控和反洗钱分析等功能。
    • 样例数据:【交易编号:TX20250426001,客户账号:622202**1234,交易时间:2024-09-10 08:00,交易金额:5,000元,交易渠道:手机银行】。

      • 日志特点:缺乏交易用途、收款方名称等关键信息
      • 解决方案:构建基于查找辅助数据流的方式补全数据的功能,用于补全数据的缺失字段值,保证数据的完整性和一致性
  • 解决过程::
  1. 确定来源字段与维度(关联)表字段
  2. 配置辅助数据源的jdbc连接、驱动、用户名和密码,支持配置任意jdbc类型的数据库
  3. 自定义SQL补全数据。rowjoin组件结合配置的数据库连接等信息,连接到具体数据库并执行sql,将sql查询的数据写入到caffeine缓存中,利用caffeine的过期机制来刷新数据,当数据过期会再次执行SQL获取结果数据。

file

四、脏数据智能容错机制设计

在大规模数据处理任务中,少量异常数据不应导致整体任务失败。我们设计了一套“错误分类➡️检测➡️处理➡️记录”闭环机制,确保在海量数据处理过程中,对各类异常进行处理。

file

其原理设计的目标是:不让个别脏数据或异常中断整个任务,同时保留所有出错信息,方便后续修复和审计。

核心原则:

  • 不中断主流程:脏数据可记录跳过,不影响整体任务运行
  • 分级处理策略

    • 解析类异常(如 JSON/XML 格式不合法)
    • 映射类异常(字段类型不匹配、缺失字段)
    • 网络/IO 异常(外部源连接失败)
  • 错误记录全链路追踪:包括原始数据、异常类型、处理结果
  • 可配置重试机制:允许针对某些可恢复异常进行有限次数的自动重试

五、未来规划与演进方向

为了使Apache SeaTunnel更加符合我们的业务场景需求,我们未来将围绕以下方向持续演进数据处理能力:

file

  1. 基于JDBC的时间增量:通过定时任务调度,利用时间戳字段从数据库中查询获取最新的增量数据,以适应不允许修改数据库配置的环境。
  2. API增量采集:通过HTTP或HTTPS协议,定时调用第三方业务系统的接口,以获取资产资质等最新数据。
  3. Connector-Syslog:规划扩展collector插件,支持 UDP和TCP的数据接收与发送,以优化内存和资源使用。
  4. 内存和资源优化:面对大规模数据处理时出现的内存溢出问题,正在进行排查和优化,以提高系统稳定性。
  5. 智能化数据流转:结合AI技术和MCP协议,将大模型的决策能力与外部工具的执行能力相结合,实现数据流转的智能化,包括自动推荐字段映射、清洗规则生成和配置文件提交。
  6. 智能检测与修复:实时监测数据流转过程中的异常,并主动修复,如通过AI模型重新映射变更字段,提高数据处理的准确性。
  7. 非结构化数据(图像、音频、视频):探索接入非结构化数据,扩展应用场景,进行智能图像识别、音频分析等,以提高数据处理的全面性和效率。

以上规划与展望旨在通过技术创新和智能化手段,提升数据处理的效率和准确性,同时优化资源使用,以适应未来数据环境的发展需求。

通过基于 SeaTunnel 的二次开发,我们成功构建了一套支持高并发、高容错、强扩展的数据处理平台,有效应对了多源异构、质量不一、敏感数据保护等挑战。未来,我们将持续推进数据治理自动化与智能化,助力企业实现更高质量的数据资产管理。

本文由 白鲸开源科技 提供发布支持!

SeaTunnel
85 声望21 粉丝

Apache SeaTunnel是下一代高性能、分布式、海量数据集成框架。通过我们的努力让数据同步更简单,更高效,大幅减少学习成本,加快分布式数据处理能力在生产环境落地。