“未来十年,世界的开源要看中国。”
在 CSDN《开源访谈录》的采访中,Apache 孵化器导师、Apache SeaTunnel PMC Member& Mentor 代立冬 说下了这样的一句话,从他在 Apache 孵化器里看到的项目来看,由来自中国的开发者主导的开源项目比重越来越大。
【资料图】
代立冬本人与“侠之大者”的郭炜一起,种下的 SeaTunnel 在开源之力的作用下,已经成为了 Apache 顶级开源项目,而这也是第一个由国人主导的数据集成领域的项目。
5 年时光悄然而逝,近 25 万行代码,200 余位贡献者,全球协作。在这背后,有哪些鲜为人知的故事,经历过哪些挫折?为什么要立下“这个轮子我造定了”的豪言壮语?在本文中,郭炜和代立冬一起为我们揭开了 SeaTunnel 如何从无到有,走向开源,走向世界。
同时,和所有开发者朋友们预告下,值此端午安康之际,郭炜、代立冬、刘天栋将与我们相约 CSDN,分享 Apache 顶级项目的经历与经验,一起共赴开源未来。欢迎点击下方按钮预约相会。
2023 年 6 月 1 日,在儿童节这天,首个由国人主导的开源数据集成工具 Apache SeaTunnel 正式宣布从 Apache 软件基金会孵化器 毕业成为顶级项目 。历经 18 个月的孵化,这个项目终于瓜熟蒂落。但也正如一个“呱呱坠地”的婴儿一样,Apache SeaTunnel 新的旅程,其实才刚刚开始。
从最早的 Waterdrop 到如今的 Apache SeaTunnel;
从实时数据处理系统到新一代一站式高性能、分布式、海量数据集成解决方案工具;
从 2018 年 1 月的第一行代码到现今的 24.5 万行代码;
从不到 10 人的贡献者到 200+ 位贡献者;
从苦寻首位用户到数千家企业上生产环境;
从寻找 Mentor 到顺利成为 Apache 顶级项目。
……
Apache SeaTunnel 社区核心人员将讲述这其中的跌宕起伏,并以时间轴为线索为你呈现它开源之路背后的故事。
Apache SeaTunnel 诞生的背后
一直以来,我们在数据处理过程中面临着诸多挑战,其中之一就是需要支持在众多数据源之间的无缝集成和高速同步。当时调研了市面上已有的数据集成工具,发现大多支持的数据源都非常有限,往往支持了上游的数据源,却找不到下游数据源的连接器。而且在面临大规模数据量时往往性能太低,操作也复杂且缺乏灵活性。于是,我们萌生了做一个开源数据集成工具的想法!
在核心团队的一番打磨之后,Apache SeaTunnel 诞生了。它不仅支持上百种数据源( Database/Cloud/SaaS ),同时支持海量数据的实时 CDC 和批量同步,可以稳定高效地同步万亿级数据。
除了基本的数据读取和写入功能,Apache SeaTunnel 区别于一般数据集成工具的功能有:
引擎与 Spark、Flink 解耦,拥有自己专为数据集成场景设计的引擎 Zeta,更快、更稳定、更省资源,意味着 Apache SeaTunnel 同时支持三种执行引擎——Spark、Flink,以及 Tunnel 自研的引擎 Zeta Engine;
具有 Web 界面更加直观易于操作;
支持连接 100+ 连接器,数据处理类型丰富,满足生产需要;
独特的 Checkpoint 功能设计,增强数据存储能力等。
这使得 Apache SeaTunnel 能够实现:
支持上百个数据源、传输速度更快、高准确率;
降低复杂性,基于 API 开发的连接器能兼容离线同步、实时同步、全量同步、增量同步、CDC 实时同步等多种场景;
提供可拖拽和类 SQL 语言界面,节省开发者更多时间 ,提供了作业可视化管理、调度、运行和监控能力。加速低代码和无代码工具的集成;
简单易维护,支持单机 & 集群部署,如果选择 Zeta 引擎部署,无需依赖 Spark、Flink 等大数据组件。
别看 SeaTunnel 现在具备这么多能力,回到两年前,当时还叫 Waterdrop 的 SeaTunnel 定位是让 Flink 和 Spark 使用起来更简单,所以整个架构设计都是基于 Spark 和 Flink 之上的,这就有了社区的第一次大讨论—— 连接器必须做到和具体引擎无关。
为什么要做到连接器和引擎无关?
首先,我们先看下连接器的作用。连接器负责将具体的上下游数据源打通,是数据集成的关键组成部分,Waterdrop 当时的架构基本是将 Spark 和 Flink 的连接器引入进来实现,使用的是 Spark 和 Flink 原生 API ,这样需要分别开发一套代码,早期批和流还是不同的 API,意味着同一个数据源为了实现批同步和流同步,需要开发两套代码。而且考虑到 Spark 和 Flink 大版本兼容性问题,代码的开发量和维护成本实在太高。
于是在 2022 年初,社区发起了重构连接器的讨论,目标是定义 SeaTunnel 自己的连接器 API 与具体的引擎解耦,不依赖具体引擎 API,真正实现批流一体,同一个数据源只需要一套代码就可以同时运行在 Spark 和 Flink 引擎上。
在讨论的初期有不少人反对,觉得 Flink 和 Spark 这些引擎很成熟,强依赖它们也没什么问题。还有些贡献者觉得我们应该放弃 Spark 全面依赖 Flink,在 Flink 的基础上把功能做好做完善。而且重构连接器 API 意味着,之前的 50 多个连接器的工作需要从 0 开始。
但经过与业界众多大神的交流和探讨后,社区不久就确定了不依赖引擎的连接器是必须要做的,“不能带着枷锁跳舞”,新的 API 将使连接器开发变得更简单,那些老的连接器也能很快在新的架构下支持起来。
事实证明,当这个目标确立后,社区花了一个月设计新的连接器 API,许多热心的贡献者参与进来,我们仅仅用了 4 个月的时间就实现了 100 多个连接器的支持,速度之快是不可想象的,而且新 API 真正实现了支持多引擎的能力。
实现了这个连接器与引擎无关之后,“干脆实现个专注于数据集成的新引擎吧,一劳永逸!”,SeaTunnel PMC Chair 高俊无意间说起的一句话,激起了社区贡献者一发不可收拾的高涨热情。
为什么要自研新引擎?
“什么,要自研引擎?” 听到这个要自研集成引擎的消息,社区炸裂了,立马又发起了是否必须要自己造一个引擎的空前热火的激烈争论。
主要争论点有几个:
从简单易用方面来看,Spark 和 Flink 都需要企业有大数据平台,这对于那些中小企业来说是一个很大的技术负担,大家需要一个更简单,使用成本更低的引擎来降低 SeaTunnel 的使用门槛。
从性能上来看,Spark/Flink 都是为计算而生的,它们解决的主要是 ETL 架构中 T 的问题,而数据集成主要是解决 ELT 中的 EL 过程,像 Join、Aggregation、开窗计算等这些特性不是数据集成关注的重点。数据集成引擎应该专注于集成,而不是计算,一切的代码优化和架构设计应该从提高作业的性能和稳定性出来,所以我们需要一个专门为集成场景设计的引擎,它应该有极佳的性能,极度稳定和占更少的资源。特别是当同步的表比较多时,能不能用较少的资源( 比如 1 核 CPU )就完成这些表的实时同步?
从业务场景来看,Flink/Spark 本身并不能满足 CDC 多表同步、整库同步,CDC 过程中的 DDL 变更同步等这些特性,如果要支持这些特性就需要修改 Flink/Spark 的源码。我们无法确定这些特性能不能被 Spark/Flink 社区接受,因为这和他们主要解决的问题的方向( ELT 中的 T,专注于数仓中的计算处理 )是不一致的。如果不被接受,那需要我们自己维护一个 Spark/Flink 的版本,这几乎是不可能的,从这个角度来看,SeaTunnel 自己做一个集成引擎也是必须。
当时社区的很多贡献者都参与了讨论,有的人觉得这是在重复造轮子。当然,最终社区还是达成了共识,决定开始一个专业集成引擎的设计和开发,我记得还有贡献者发出了 “ 这个轮子我造定了 ” 的宣言。
就这样,社区一咬牙一跺脚,把专注于解决同步领域问题的引擎 Zeta 给做了出来。在去年 10 月份,我们成功发布了 Zeta 的正式版本。当时名字叫 SeaTunnel Engine,大家觉得应该起一个耳熟能详而且符合这个引擎定位的名字。
于是社区就开始了头脑风暴,经过了约两周的讨论,我们在众多候选的名字里选择了使用 Zeta 这个名字,Zeta 是目前可观测到的宇宙中最快的行星,也有不少用户亲切的叫它为 “泽塔奥特曼”——宇宙中最强的奥特曼力量,一起守护光的信仰!我们希望 “泽塔奥特曼” 引擎让集成这件事变得更简单、更高效、更稳定、更省资源。
开启孵化:为什么要加入 Apache 软件基金会?
其实 Apache SeaTunnel 在从 Waterdrop 改名之前,就有加入全球最大的开源组织 —— Apache 软件基金会的计划。郭炜( SeaTunnel Mentor )在 SeaTunnel 加入 Apache 孵化器时就说过:
现在 Apache Sqoop 退役了,如何解决数据源之间数据打通的问题,没有一个特别优秀的开源项目来解决。而现在数据源的种类繁杂,如果只是一家企业解决自己使用的几个数据源之间的打通,根本无法解决更多的人使用更多数据源打通的问题,如果出现新的数据源还需要重新编写。而开源就是 “聚沙成塔、海纳百川” 的模式,可以让每个企业、每个人方便快捷地使用开源数据源连接器,同时如果有自己使用的数据源也可以贡献到开源项目当中。这样,一个连通各个数据源的开源项目就可以像滚雪球一样,越滚越大,让更多的用户更容易地连通各种各样的数据源,从而实现数据整合当中的 “飞轮效应”。
还有重要的一点在于,在此之前,Apache SeaTunnel 的一些核心贡献者和导师已经有开源项目 DolphinScheduler 的成功孵化经验,因此对于 SeaTunnel 进入孵化器大家都充满信心和期待。虽然进入 Apache 孵化器的进程并非一帆风顺,但是前期的经验让团队不至于无从下手,而是有条不紊地进行。
具体来说,SeaTunnel 前身 Waterdrop 的核心贡献者与 DolphinScheduler 社区在 2018 年就建立了密切的联系,DolphinScheduler 的伙伴们对 Waterdrop 也一直密切关注,Waterdrop 无论是从项目本身的代码质量,还是未来在数据集成领域的潜力来说,都是一个 “潜力股”。所以当 Waterdrop 跟我们一起商量是否可以一起接着做,没有经过很长时间的犹豫,我们就投入人力和精力到 Apache SeaTunnel 的研发中,并在不久后推动其进入 Apache 孵化器,我们以开放的心态,希望能够让 SeaTunnel 在开源的力量下,高效、准确、快速地进行跨数据源的同步、转化数据,让大家在多数据源的场景下,可以快速、简单地完成自己的目标。我们相信在「Apache Way」的指导下,Apache SeaTunnel 会获得更多的支持,加速项目的成长。
进入 Apache 基金会,寻找 Mentor 往往是最初且关键的一步。但与其他需要摸着石头过河的项目不同,Apache SeaTunnel 在孵化器讨论阶段就曾引起全球 Apache 孵化器导师的关注,“导师” 数量远超过普通孵化项目,以至于 Apache 孵化器负责人 Justin 邮件提醒“导师不能过多”。也有导师在全球 Apache 孵化器讨论邮件列表里表示遗憾,Apache 孵化器项目 “旱的旱死,涝的涝死”,有的项目要四处寻求导师才可以进入孵化器,有的项目则需要大家争抢导师。
很快,Apache SeaTunnel 在 Jean-Baptiste Onofré、Kevin Ratnasekera、Willem Ning Jiang( 姜宁 )、 Ted Liu( 刘天栋 )、 Lidong Dai( 代立冬 )、Guo William( 郭炜 )、Zhenxu Ke( 柯振旭 )7 位 Mentor 的帮助和指引下很快步入 Apache 孵化器的正轨。
姜宁是位开源 “老手”,最终成为了我们的 Champion。姜宁是国内最资深的 Apache Member 之一,2023 年再次当选 Apache 软件基金会董事,成为首位连任 Apache 基金会董事的华人。
代立冬是 Apache DolphinScheduler 项目的 Chair,在开源领域有丰富的经验。和 Apache SeaTunnel 也很有渊源,Apache SeaTunnel 很多功能也有他帮着组织设计,并一同建设 Apache SeaTunnel 社区。在参与 Apache SeaTunnel 建设的这一年多的时间里,他又陆续担任了多个 Apache 孵化项目的 Mentor,并在 2022 年被选举为 ASF Member。
Apache Member Jean Baptiste Onofré 和 Kevin Ratnasekera 也都是在 Apache DolphinScheduler 孵化期间熟识的人,他们都有着丰富的项目孵化经验。
之后,郭炜、Ted Liu、柯振旭也加入到 Mentor 行列中来,让 Apache SeaTunnel 的孵化之路更加顺利。
为了正式进入 Apache 孵化器,我们也参考成熟项目,对 Apache SeaTunnel 进行了整体上的项目代码规范;为与国际接轨,还对项目文档也进行了大量的英文翻译和校对工作,Apache 项目网站也全部进行了英文化。这些整理让 Apache SeaTunnel 项目更加规范和“国际范儿”。
此外,加入孵化器后,我们在项目功能上进行了比较大的改动,其中最重要的变化,就是上文提到的数据同步专用引擎 Zeta 的研发和发布。这个可以为用户提供高吞吐、低延时、强一致性的同步作业保障的引擎在 2.3.0 版本中正式发布,作为 Apache SeaTunnel 默认使用的引擎。它实现了与 Flink 和 Spark 引擎的解耦,让用户可以不依赖 Flink 和 Spark 独立运行,自治集群( 无中心化 )、数据缓存、可控制速度、共享连接池、断点续传、耕细粒度的容错设计、动态共享线程等独特功能,也让 Apache SeaTunnel Zeta 引擎前所未有地简单易用、更省资源、更稳定、更快速,可以做到全场景数据同步支持。
Apache Way 的探索
就像我们加入一家新公司需要了解这家公司的文化一样,参与 Apache 开源项目之前,我们也需要了解 ASF 的文化,即 The Apache Way。
深入进入开源就会发现,开源不只是开放源码这么简单的一件事,开源还关乎社区的管理、活跃、沟通交流、文化等,这就需要我们对 Apache Way 有更加深刻的理解。
鉴于此前的经验,Apache SeaTunnel 在进入 Apache 孵化器初期就对 Apache Way 的重要性有着深刻的理解,比如对于开源社区来说,Community Over Code 的理念要植根心中,为此也需要社区做出准备和努力,尽可能降低每个有兴趣参与项目人的门槛,甚至打造 0 门槛,比如制定社区激励计划、制作新手入门指南、精选 Good First Issue、重要 Feature 进展跟踪、通过定期的用户访谈获取反馈和优化建议、定期解答社区关于项目和社区的疑问等。
社区贡献不仅限于代码,非代码的贡献甚至有时会发挥比代码更加有价值的作用 ,比如利用自身影响力为项目引发关注做贡献,写作项目相关技术和非技术文章,参与社区组织的各种活动、在各种时机和场合为 Apache SeaTunnel“代言”,把它推荐给更多的用户等,都是参与社区的渠道。
同时,Community Over Code 还强调开放、交流、合作,Apache SeaTunnel 秉持着这些理念,坚持社区内与海内外社区保持沟通,相互学习交流,坚持与 Apache 社区建立沟通,所有讨论发生在邮件内、Issue 中,并通过社区自媒体渠道公布项目和社区的重大进展和计划,让社区保持公开透明。
从进入孵化期至今,Apache SeaTunnel 先后与多个海内外开源项目举办线上线下 Meetup 20 余场,包括已先于 Apache SeaTunnel 顺利从 ASF 孵化器毕业的 Apache Shenyu、Apache InLong、Apache Linkis,Apache Doris、IoTDB、StarRocks、TDengine 等成熟开源项目,以及在美国、印度等海外地区与 Trino、APISIX、Shopee、ALC Indore 联合举办的 Meetup 等。
社区之间的合作与交流推动开源技术的发展和应用,Apache SeaTunnel 与其他开源项目合作,共同解决了技术难题,有利于提升开源生态的整体水平,拓展了开源生态的边界。
经过时间的积累,社区已有了质的变化。从社区的邮件讨论、GitHub 的数据展示中,你会发现 Apache SeaTunnel 的社区开始真正变得活跃与多元化。从下表我们可以看到 Apache SeaTunnel 在 Apache 孵化器一年多的社区数据变化。
可以看到,社区与贡献者就像是“鱼”与“水”之间的共存,越来越多贡献者参与进社区,给社区这条“鱼”不断带来新鲜的生命之水,让 Apache SeaTunnel 社区蓬勃发展;水也因为社区的这条大鱼不断腾跃而流动起来,流得更快、更远。鱼水共生,才能生生不息。
从孵化器毕业
经过为期 18 个月的孵化,社区根据 Apache 成熟度评估模型,从代码、许可和版权、版本发布、质量、社区、一致意见、独立性 7 个方面进行谨慎评估后,认为 Apache SeaTunnel 毕业的时机已经比较成熟,便开始筹备从 ASF 孵化器毕业事宜。
Apache 项目成熟度评估模型
比如,在代码成熟度上,社区经历过多个版本的升级与新增功能,提升了 Apache SeaTunnel 的性能和功能,进一步提高了数据源之间的高效同步与转换能力;在社区建设方面,如上所述,通过多场海内外线上线下的 Meetup 活动,Apache SeaTunnel 社区提供了交流和分享的平台,促进了开发者之间的交流和合作,扩大了开源项目的影响力。此外,Apache SeaTunnel 也加强了与上下游生态项目的集成,如 Flink、Spark、TiDB、OceanBase、IoTDB 等,促进了不同项目之间的协同发展,提升了整个开源生态的互操作性和整体性能。
在 Apache Member 的指导下,Apache SeaTunnel 4 月份在社区发起了毕业讨论,并根据 ASF 孵化器的指导意见改进不足,不断修正。最终,Apache SeaTunnel 通过毕业投票,在 2023 年 5 月 17 日通过 ASF 董事会决议,如愿加入 TLP 行列!
未来之路:中国开源如何走向世界
Apache SeaTunnel 的目标是“连接万源,同步如飞”,力争成为世界第一流的数据集成工具,未来也将与更多的上下游生态项目进行集成。同时,也 将继续承担起推广开源文化的使命,促进开发者之间的交流和合作,为开源社区的发展提供更多平台,激发更多人参与开源项目并做出贡献。
值此重要时刻,我们呼吁更多人参与到 Apache SeaTunnel 贡献者中来!
最后,对于 Apache SeaTunnel 来说,从 ASF 毕业的道路并不是一帆风顺,仅以我们在开源世界摸索的一点经验,对中国开源生态发展表达一些观点和建议:
加强开源文化建设
在中国,开源文化的传播和普及仍然需要进一步加强。需要鼓励更多的开发者和企业参与到开源项目中,促进知识共享和协作。同时,也需要提高对开源的认知和理解,推动开源在教育、企业和政府等领域的广泛应用。
提高开源项目的质量和影响力
中国的开源项目在数量上已经有了一定的积累,但在质量和影响力上仍有提升的空间。需要注重项目的技术创新和实用性,鼓励更多的高质量项目涌现。同时,要积极参与国际开源社区,与国际项目进行合作和交流,提高项目的知名度和影响力。
加强开源社区建设和治理
开源社区是开源项目成功的关键所在。需要建立健全的社区治理机制,促进社区成员的参与和贡献。同时,要提供良好的沟通和协作平台,鼓励开发者之间的交流和合作。此外,还需要加强对社区成员的培训和支持,提高其技术和管理能力。
加强开源与产业的结合
开源技术在推动产业创新和发展方面具有重要作用。需要加强开源技术与各个行业的结合,推动开源技术在企业和公共服务领域的应用。同时,要积极培育开源技术生态圈,促进开源项目和产业链的协同发展。
总而言之,中国开源已经取得了一些成绩,许多国内开源项目在国际上也获得了广泛的认可和使用,但还有很多工作需要继续努力。通过加强开源文化建设、提高项目质量和影响力、加强社区建设和治理以及加强开源与产业的结合,可以进一步推动中国开源生态的发展,促进技术创新和产业升级。
作者简介:
郭炜,Apache 基金会成员,Apache DolphinScheduler PMC Member,Apache SeaTunnel Mentor。
代立冬,白鲸开源联合创始人,Apache DolphinScheduler PMC Chair & Apache SeaTunnel PMC Member& Mentor,Apache 孵化器导师,Apache Local Community Beijing 成员。
*本文封面图由 Midjourney 绘制。