Apache SeaTunnel 2.3.13 版本前瞻:核心引擎变化和 AI ETL 趋势值得关注

3 阅读4分钟

Apache SeaTunnel 2.3.13 即将发布。作为一个承上启下的重要版本,它在大幅增强核心引擎稳定性的同时,进一步补全了 CDC 场景的能力拼图,并向 AI ETL 领域迈出了关键一步。

通过对 2.3.13-release 分支的深度源码分析,我们为您提炼了本版本的核心更新概览。

核心亮点

1. 核心引擎:Flink Schema Evolution 与 Zeta 稳定性

  • Flink 引擎支持 CDC Schema Evolution (#9867) 这是 Flink 用户期待已久的功能。2.3.13 正式在 Flink 引擎层实现了源端 Schema 变更(DDL)的自动传递与适配,打通了从 CDC Source 到 Flink Engine 的最后一公里,使得 Flink 任务也能像 Zeta 引擎一样从容应对上游表结构变化。

  • Zeta 引擎深度优化

    • 远程分页查询支持 (#9951):显著提升了 SeaTunnel UI 及 REST API 在大规模任务场景下的响应速度与用户体验。
    • 内存泄漏修复 (#10315):修复了取消挂起任务时的内存泄漏问题,提升了长期运行集群的稳定性。
    • 多 Sink 场景指标修复 (#10376):解决了多目标写入时 Write Count 显示不准确的问题。

2. AI ETL:拥抱非结构化数据

  • 多模态 Embedding 转换 (#9673) 新增 Multimodal Embedding Transform,支持对文本和图像数据进行向量化处理。结合 Markdown 解析 能力,SeaTunnel 现在可以直接构建从“非结构化文档”到“向量数据库”的完整 RAG(检索增强生成)数据管道。
  • Elasticsearch Vector 优化 (#10260) 优化了 Elasticsearch Sink 对向量参数的支持,使其更适配 AI 向量存储场景。

3. 连接器生态:多表同步与类型增强

  • MongoDB:全面增强多表(Multi-table)同步模式,统一了非关系型数据源的 Schema 配置参数 (#10370)。
  • HBase:Sink 端新增对 DATE, TIME, TIMESTAMP, DECIMAL 类型的支持,并修复了 Decimal 反序列化问题 (#10291)。
  • Hive:支持配置多个 Metastore URI 以实现自动故障转移 (#10253),并新增了 Socket/Connection 超时控制 (#10254)。
  • JDBC/Redshift:升级驱动版本以解决 OOM 问题,并修复了大字段 Schema 合并时的整数溢出 Bug。

关键修复与优化

本版本修复了多个可能导致生产环境不稳定的关键 Bug,建议高负载场景用户重点关注:

组件类型问题描述修复影响
CoreHangFakeSource 在 restore 后可能因未发送 NoMoreSplits 而导致任务挂起 (#10275):解决特定场景下任务无法结束的问题
ClickHouseLeak修复 ClickhouseCatalogUtil 中的 ThreadLocal 内存泄漏 (#10264):防止长期运行服务的堆外内存溢出
RedshiftOOM升级 JDBC 驱动解决大量数据读取时的 OOM (#10393):提升 Redshift 数据同步稳定性
HBaseNPE修复读取空表时可能抛出的 NullPointerException (#10336):增强边界条件下的健壮性
SSHCrash升级 jsch 库修复缓冲区问题 (#10298):提升 SFTP/SSH 连接稳定性

深度功能解析:构建 AI 知识库数据流

2.3.13 的一个隐含核心主线是 "Unstructured Data to Vector"。以下 Demo 展示了如何利用新特性,将本地 Markdown 知识库解析并同步到向量存储(以 Console 为例)的完整流程。

场景描述

读取本地目录下的技术文档(Markdown),按章节解析结构化数据,并准备进行 Embedding 处理。

配置文件 (Demo)

env {
  parallelism = 1
  job.mode = "BATCH"
}

source {
  LocalFile {
    path = "/data/knowledge_base"
    file_format_type = "markdown"
    # 2.3.13 新增:Markdown 读取策略配置
    parse_strategy = {
        # 提取标题层级、内容及元数据
        schema = [
            {name = "doc_name", type = "string"},
            {name = "heading", type = "string"},
            {name = "content", type = "string"},
            {name = "code_block", type = "string"}
        ]
    }
  }
}

transform {
  # 1. 预处理:清洗文本
  Replace {
    source_table_name = "source_table"
    result_table_name = "cleaned_table"
    replace_field = "content"
    pattern = "\\n+"
    replacement = " "
  }

  # 2. (2.3.13+) AI 转换:调用模型生成 Embedding
  # 注意:此功能依赖 Transform-V2 的 Embedding 插件
  # Embedding {
  #   source_table_name = "cleaned_table"
  #   result_table_name = "vector_table"
  #   vector_field = "vector"
  #   model_provider = "openai" 
  #   api_key = "${OPENAI_API_KEY}"
  # }
}

sink {
  # 模拟输出到向量数据库
  Console {
    source_table_name = "cleaned_table" 
    # 如果开启了 Embedding,这里可以预览生成的向量
  }
}

源码导读

  • Markdown 解析核心MarkdownReadStrategy.java 该类利用 flexmark-java 库实现了对 Markdown AST 的遍历,将非结构化文本转化为 SeaTunnel 的 Row 结构。
  • Schema Evolution 适配:[FlinkRowConverter.java](file:///Users/apple/Desktop/github/seatunnel/seatunnel-translation/seatunnel-translation-flink/seatunnel-translation-flink-common/src/main/java/org/apache/seatunnel/translation/flink/serialization/FlinkRowConv