写点什么

保持热爱,奔赴山海:Apache Calcite PMC 之路

  • 2023-02-21
    北京
  • 本文字数:2527 字

    阅读完需:约 8 分钟

保持热爱,奔赴山海:Apache Calcite PMC 之路

本文出自字节跳动基础架构流式计算方向的工程师李本超同学专访。李本超从 2022 年 3 月开始参与 Apache Calcite 社区贡献,主要贡献了包括子查询优化、Join 优化、JSON 函数优化、JDBC Adapter、通用的表达式优化等。于 2023 年 1 月正式受邀成为 Apache Calcite PMC。

十个月,由初识到热爱


在过去几年,我主要是负责 Flink SQL 相关的工作。在不断深入参与到 Flink 的开发贡献的过程中,也逐步的了解到了背后的 Calcite。因为 Flink SQL 本身也是基于 Calcite 提供的核心能力进行构建的,可以把一些常见但是又复杂的事情交给底层的 Calcite 框架来做,比如 SQL 的解析、校验、优化等。由此,我开始逐渐接触到 Apache Calcite。


我发现 Apache Calcite 属于比较典型的 “纯技术社区”,也就是没有商业化相关的公司在背后推动;而它本身又是一个足够复杂,具有极高技术挑战性的一个项目。它的出现解决了众多项目需要支持 SQL 但又成本太高的问题。直接利用 Calcite 的现成的能力,可以快速让一个系统具备比较完备的 SQL 支持能力,这给 Apache 的其它项目带来了巨大的便利。Calcite 项目被众多重量级的 Apache 项目用来实现 SQL 引擎的能力,比如 Apache Beam / Druid / Hive / Kylin / Flink / Drill / Phoenix 等,当然也包括一些商业产品。而我也在对 Flink SQL 进行更深度的优化的时候,开始逐渐接触到很多 Calcite 的核心概念。


在学习过程中,我发现 Calcite 里面有非常多的经典设计和思想,而且对于 SQL 引擎这个领域,Calcite 可以说是非常权威的。也是这些原因逐步的吸引着我更加深入的了解,也一步一步走向对 Calcite 社区进行贡献的道路。


我的第一个 PR 是 22 年的 3 月份,当时正值疫情隔离在酒店,周末闲来无事就浏览一些技术相关的社区,刚好看到 Calcite 社区有人提出了 JSON 函数的缺陷,我们当时内部也在考虑在 Flink 上支持 JSON 函数,所以就尝试帮 Calcite 社区解决一下这个问题,没想到第一个 PR 在一个小时内就被合入了,当时感觉到社区小伙伴真的太热心了。受到社区氛围感染,我就开始了 Calcite 的贡献之旅。很快另一个惊喜又来了,在 6 月份就收到了成为社区 Committer 的邀请。在拿到 Committer 身份之后,我发现社区的 reviewer 资源其实是非常匮乏的,虽然很多 PR 都可以得到较快的响应,但是仍然存在一些 PR 得不到及时的处理,所以我就把更多精力放到了辅导其它贡献者上。到 23 年 1 月份,又收到了成为社区 PMC 的邀请。回首这 10 个月,是整个社区小伙伴们长期的奉献精神鼓舞着我一直坚持下来。


目前我对 Calcite 社区的贡献方向较为广泛,包括像子查询优化、Join 优化、JSON 函数优化、JDBC Adapter,也包括一些通用的表达式优化等等;除了代码贡献之外,我也比较关注社区的技术讨论、用户提问、PR Review 等等,每个方面都有一些不同程度的贡献。

在现代化的数据领域,SQL 无疑是最重要的表达方式之一。而 Calcite 在这个领域深耕多年,有着深厚的积累,且在很多重量级的项目当中得到了反复的验证和打磨。相信未来,Calcite 会有更加广阔的市场空间,社区也会在逐步的在众多贡献者的推动下越来越好。


谈到收获。从一开始接触到开源、参与 Flink 社区,到至今很荣幸又受邀成为了 Apache Calcite PMC。一路走来,参与开源确实让我收获颇丰。


首先,最大的收获是技术能力的提高,在参与的过程中,需要跟这个领域最权威的一批同学一起讨论解决问题,需要对整个项目的架构有足够深的理解才能做得到;而且大家在讨论的过程中,也会碰撞出来更多的想法,提高自身的技术水平。在这个过程中,技术视野的提升是非常大的。


其次,是收获到了一批志同道合的社区小伙伴,能够逐步在社区中得到认同,进一步再把这种社区文化传递下去是一件非常幸福开心的事情。


最后是一些个人影响力的提升,比如拿到社区的 Committer 或 PMC,也是社区小伙伴对你能力的肯定。

目前,我主要参与的开源项目是 Apache Calcite 和 Apache Flink,主要关注这里面关于 SQL 生态、优化、效率、流批一体、Streaming Warehouse 等相关的事情。


一些建议


“参与开源”已经是一个老生常谈的话题了,网上也有很多同学分享过经验。我这里也谈一下自己的感受:

参与开源的过程其实是一个“持续学习”的过程,尤其是对于像 Calcite 这种入门曲线相对陡峭的项目来讲,保持持续不间断的学习,是非常重要的。面对社区里面众多的问题、issue、讨论,很多人一开始会觉得难以入手,这个时候可能就是需要针对某个 issue 做一些深入的研究,然后再逐步的参与进来。虽然我现在已经是 Calcite 社区的 PMC 了,但是这个项目里面仍然有大量的需要我不断学习成长的内容,我也会持续坚持下去。


很多时候参与的方式并不只是代码,代码只是其中一部分。参与到开源社区,要把这个项目作为自己的项目去维护它,所以从这个角度来看待贡献,就是“不挑活”,所有有利于社区变的更好的事情,都是一种贡献,比如用户问答、代码 review、文档的维护、不稳定测试的修复、build 系统的提升、code review、技术讨论、release 等等。


大家在参与开源社区贡献的时候,社区的 PMC 成员会观察大家的每一个行为,最终通过综合考虑,比如贡献度、专业度、是否遵循 Apache Way 等方面来考虑是否邀请成为 Committer/PMC。整个过程其实就是一个建立“信任”的过程。


对个人来讲,贡献社区最直接的回报就是可以跟该领域最权威的团队一起工作,学习和成长,并且逐步成为这个家庭的一员。当然能够在社区拿到 PMC / Committer 等身份,也是对个人能力和贡献的认可。


对团队来讲,我们需要提升团队对于技术的标准和要求,同时对最前沿的技术保持敏感,贡献社区就是最直接的方式之一。


对公司来讲,虽然贡献社区不会直接对公司的业务产生收益,但是从公司的对外的技术影响力会有一些帮助。对于企业,尤其是大企业来讲,从使用开源社区的软件,到反哺开源社区,才会让开源软件有一个更加良性的循环、持续保持“生命力”。


对社区来讲,开源社区就是由一个一个的独立贡献者组成的虚拟组织。尤其是对于像 Calcite 这种背后没有商业公司支撑的开源项目来讲,所有贡献者都是用自己的时间对社区进行贡献,也正是这些贡献力量在不断维持社区的正常运转,并且不断前进。


希望每位同学都能在开源社区愉快玩耍。


保持热爱,奔赴山海。

发布于: 刚刚阅读数: 3
用户头像

还未添加个人签名 2022-11-18 加入

还未添加个人简介

评论

发布
暂无评论
保持热爱,奔赴山海:Apache Calcite PMC 之路_flink_字节跳动开源_InfoQ写作社区