Apache Wayang 1.1.1 介绍与选型指南

Apache Wayang 1.1.1 介绍与选型指南:异构数据编排平台的三层架构与跨平台代价优化器、多引擎支持与 Java/Scala/Python API、官方 WordCount 快速上手,及与 Apache Beam、Flink 的量化选型对比。

Apache WayangApache Wayang2026/10/18

Apache Wayang 1.1.1 介绍与选型指南

一、信息基准

本章列明本文事实性信息的核查时间与来源,全部信息取自 Apache Wayang 官方渠道,不含本地实测推算。

1.1 版本基准

项目内容
本文介绍的软件版本Apache Wayang 1.1.1(官方最新稳定版)
查询日期2026-10-18
版本判定依据downloads.apache.org/wayang/ 目录中最高版本为 1.1.1,apache-wayang-1.1.1-source-release.zip 时间戳为 2026-02-11(发行文件名已不带孵化后缀)
版本节奏佐证GitHub 仓库(apache/incubator-wayang)releases.atom:apache-wayang-1.1.1(2026-02-10)、v1.1.0-rc2(2025-06-24)、v1.0.0-rc5(2025-02);Maven Central org.apache.wayang/wayang-basic 元数据 latest/release 同为 1.1.1
项目状态Apache 顶级项目:官方博客 2025-12-11 发布《Apache Wayang Graduation》,宣布从 Apache 孵化器毕业成为 TLP;projects.apache.org PMC 列表收录 wayang

1.2 官方来源清单

来源地址用途
项目官网https://wayang.apache.org/项目定位、毕业公告
官方毕业公告https://wayang.apache.org/blog/wayang-graduation毕业 TLP 事实依据(2025-12-11)
官方架构文档https://wayang.apache.org/docs/introduction/about三层架构与优化器说明
官方特性文档https://wayang.apache.org/docs/introduction/features跨平台优化器、ML4all 等特性
官方入门文档https://wayang.apache.org/docs/guide/getting-started快速上手示例代码
发行目录https://downloads.apache.org/wayang/1.1.1 源码发行包
GitHub 仓库https://github.com/apache/incubator-wayang代码、tag 记录、stars 数(仓库名仍为 incubator-wayang)
Maven Centralhttps://repo1.maven.org/maven2/org/apache/wayang/版本交叉核验

二、软件概述

本文介绍的是 Apache Wayang 1.1.1。官方架构文档的定义:Wayang 是一个统一的数据处理框架("a unifying data processing framework"),无缝集成并编排多个数据处理系统,兼顾性能与灵活性。它的独特卖点是:用户用同一套 API 编写数据处理应用,由 Wayang 决定(或按用户指定)每个算子实际运行在哪个引擎上——本地 Java、Apache Spark、Apache Flink 或数据库,甚至同一个作业的不同步骤可拆分到多个引擎执行。

项目沿革:Wayang 曾在 Apache 孵化器孵化多年(GitHub 仓库名至今仍为 apache/incubator-wayang),官方博客于 2025-12-11 正式宣布毕业成为 Apache 顶级项目;随后发布的 1.1.1 源码发行包(apache-wayang-1.1.1)已不带 -incubating 后缀,并发布在顶级项目发行目录 downloads.apache.org/wayang/ 下。

定位类比:如果说 Spark/Flink 是"引擎",Beam 是"统一编程模型",Wayang 则更进一步做"运行时引擎编排"——同一份数据流计划(Wayang Plan)可以被翻译成不同引擎的执行计划,由代价模型选择最优执行位置。

三、核心架构

3.1 三层架构

依据官方架构文档,Wayang 采用三层架构,在用户应用与底层数据处理平台之间建立战略性抽象:

层职责
应用层(Application Layer)封装应用自身业务逻辑
核心层(Core Layer)把应用逻辑翻译为中间表示——Wayang 计划(Wayang plan)
平台层(Platform Layer)把 Wayang 计划转换为具体引擎的执行计划,为每个算子分配执行平台

3.2 跨平台优化器

官方文档将跨平台优化器(cross-platform optimizer)列为核心创新:它自动完成数据系统选择,免去用户复杂的人工平台决策。优化过程通过一组可扩展的图变换在 Wayang 计划上识别出可能更优的替代执行计划,再用平台特定的代价模型评估;代价模型可以是用户自定义的,也可以从历史数据学习,并依据底层硬件配置(如分布式算子的计算节点数)参数化。

3.3 支持的执行引擎与 API

  • 执行引擎池:官方架构文档表述为"包括但不限于任意数据库、Apache Spark、Apache Flink 与 ML 系统";入门文档同时内置了本地 Java 执行引擎(无需集群即可运行)。
  • 开发 API:Java/Scala 的 JavaPlanBuilder/PlanBuilder(官方入门示例),以及 Python 的 pywy 模块(官方入门文档给出 Python 示例)。
  • 机器学习:官方特性文档介绍 ML4all 组件,屏蔽算法选择与底层实现细节,以代价模型支撑可扩展机器学习。

四、功能特性

4.1 跨平台执行

  • 同一份管道代码可指向单一引擎(确定性执行),也可注册多个引擎交给代价优化器逐算子选择(官方入门文档"Write your data pipeline once. Run it anywhere.")。
  • 单个作业可拆分到多个平台协同执行,官方特性文档明确支持"execute a single task across multiple platforms"。

4.2 统一编程模型

  • 以 Wayang 计划为中间表示,算子语义(readTextFile、flatMap、filter、map、reduceByKey、writeTextFile 等)在各引擎间保持一致(官方入门示例)。
  • Java、Scala、Python 三种语言入口(官方入门文档三段示例代码)。

4.3 可扩展 ML 与生态

  • ML4all:面向机器学习工作流的高层抽象(官方特性文档)。
  • 官方博客持续发布 Kafka 集成、空间数据处理(Spatial Wayang)、数据湖友好(GSOC 2026)等方向进展,显示社区活跃方向。

五、快速上手

以下内容引自官方入门文档(wayang.apache.org/docs/guide/getting-started),本文不做本地实测。官方示例为"只注册本地 Java 引擎即可在本机运行"的 WordCount。

5.1 Scala 示例(官方原文)

官方入门文档给出的 Scala 版 WordCount(仅注册本地 Java 引擎即可在本机运行):

import org.apache.wayang.api._
import org.apache.wayang.core.api.{Configuration, WayangContext}
import org.apache.wayang.java.Java

object WordCount {
  def main(args: Array[String]): Unit = {
    // Register ONLY the local Java engine → runs on your machine, no cluster needed.
    val wayangCtx = new WayangContext(new Configuration)
    wayangCtx.register(Java.basicPlugin)
    new PlanBuilder(wayangCtx)
      .withJobName("WordCount")
      .withUdfJarsOf(this.getClass)
      .readTextFile("file:///path/to/input.txt")
      .flatMap(_.split("\\W+"))
      .filter(_.nonEmpty)
      .map(word => (word.toLowerCase, 1))
      .reduceByKey(_._1, (c1, c2) => (c1._1, c1._2 + c2._2))
      .writeTextFile("file:///path/to/output.txt", t => s"${t._1}: ${t._2}")
  }
}

官方入门文档同页还给出等价的 Java(JavaPlanBuilder)与 Python(pywy 模块 WayangContext)版本;将注册的插件从 Java.basicPlugin() 换成 Spark/Flink 插件即可切换执行引擎,管道代码本身不变。

5.2 获取发行物

六、适用场景与限制

6.1 适用场景

  • 异构数据系统并存的组织:同一套管道逻辑需要在不同引擎/数据库间迁移或混跑,避免被单一引擎绑定。
  • 边缘/本地与集群并存的场景:开发期本地 Java 引擎运行,生产期切换 Spark/Flink 而不重写代码。
  • 跨平台代价优化研究与实践:代价模型可自定义或从历史数据学习(官方特性文档)。
  • 需要在管道中混用机器学习算子的场景(ML4all)。

6.2 已知限制

  • 项目 2025-12 才宣布毕业,1.1.1 为毕业前后发布的早期稳定版本,生态成熟度与引擎覆盖度不及 Beam/Flink 这类主流框架。
  • 社区规模较小(GitHub stars 276),遇到引擎适配问题时可参考资料有限。
  • 引擎插件覆盖以官方文档声明的 Java 本地、Spark、Flink、JDBC 数据库为主,其他系统需按平台插件机制自行接入。
  • 跨平台优化带来额外调度开销,单一固定引擎场景下相对直接使用该引擎无性能优势。
  • GitHub 仓库名仍为 incubator-wayang,检索文档时需注意新旧命名并存。

七、同类选型对比

7.1 对比对象与数据基准

选取两个可比对象:Apache Beam(统一编程模型与多运行器体系)与 Apache Flink(自成一体的流批引擎)。数据于 2026-10-18 取自各项目官方渠道(GitHub 仓库页、releases.atom)。

7.2 量化对比

维度Apache Wayang 1.1.1Apache Beam 2.77.0Apache Flink 2.3.0
开源许可Apache-2.0Apache-2.0Apache-2.0
GitHub stars + 最近发版276 stars;apache-wayang-1.1.1(2026-02-10)8686 stars;Beam 2.77.0(2026-10-07)26412 stars;release-2.3.0(2026-06-22)
版本节奏1.0.0-rc5(2025-02)→ 1.1.0-rc(2025-06)→ 1.1.1(2026-02),慢节奏小社区半月度级别的稳定版滚动(2.7x 系列持续推进)双年大版本、年内小版本,成熟发布流程
兼容矩阵Java/Scala/Python API;执行引擎:本地 Java、Spark、Flink、JDBC 数据库(官方文档口径)Beam SDK(Java/Python/Go 等)+ 多 Runner(Flink/Spark/Dataflow 等)自有引擎与独立部署栈,JDK 基线以官方 2.x 发布说明为准

补充说明:Beam 的多 Runner 是"一次编写、选定 Runner 全量执行",Wayang 是"逐算子跨引擎编排与代价优化",粒度不同;Flink 则是引擎本体,性能与生态最强,但绑定自身运行时。Wayang 的优势在异构编排自由度,劣势在社区规模与生产案例数量。

7.3 选型建议

已有稳定 Spark/Flink 平台且无跨引擎诉求的团队直接用引擎本身即可;需要"一套代码多引擎交付"且能接受较小社区规模时评估 Wayang 1.1.1;追求工业级流批处理与成熟生态则优先 Beam 或 Flink。

八、参考链接