本文出自字节跳动流式计算团队的方勇、胡伟华同学专访。两位同学在 Apache Flink 社区主要贡献了包括 Runtime Coordinator、Streaming Warehouse 等相关 Feature。于2023年7月正式受邀成为 Apache Flink Committer。
在软件开发的世界中,开源已成为普遍关注的话题。越来越多的企业和开发者认识到开源的重要性,并开始积极拥抱开源、贡献开源。自2017年开始,字节跳动流式计算团队开始尝试使用 Apache Flink 作为流式计算引擎,并逐步加大对开源社区的关注和投入。
近两个月来,团队方勇、胡伟华两位同学先后受邀成为 Apache Flink Committer。本文将对两位新晋 Committer 参与开源的心路历程进行专访。
Apache Flink 是一个高性能的分布式计算框架,目前也已经是流式计算的事实标准,很大程度上推动了整个流式数据处理方面的发展。对于两位新晋 Committer 而言,Flink 在 Apache 中是不可忽视的明星项目。
作为一个非常活跃的社区,用户提出的问题很快就会获得解答(基本在一天内),用户体验非常友好。同时社区成员也非常专业,保证了 Flink 技术上的先进性。此外,Flink 也在流计算的基础上扩展广泛的应用场景,基于 Flink 的流批一体、OLAP、Streaming Warehouse 等都在字节有相应的落地。
Flink 是一款非常强大和灵活的计算引擎,字节跳动很多业务场景都是用 Flink 来支持。作为 Flink Runtime 研发工程师,随着我对这个项目了解的逐渐深入,我越来越感受到其设计理念的先进性,也萌发了积极回馈社区的想法。因此,我一方面订阅社区相关邮件,积极回答社区其他开发者的问题;另一方面致力于 Flink 的调度、资源管理领域,逐步将一些字节内部的优化经验分享回馈社区。
在参与社区的过程中,我主要对社区做出了以下几方面的贡献:
随着持续参与社区,今年8月,我很荣幸受邀成为 Apache Flink Committer。
我现在在 Apache Flink 项目中的精力,主要集中在 Runtime Coordinator 相关工作。在这方面,字节跳动内部还有一些定制化开发,我们也会积极回馈到社区。在后续的 Feature 开发中,我们也会把合入社区放在重要位置考虑,积极贡献到社区中。
开始参与 Flink 社区贡献时,最大的挑战是寻找适合自己的 issue。最初我经常关注开发邮件组,接收到新的 issue 邮件时,会马上查看是否能够熟悉或解决较简单的问题。然后很快就会@社区的 PMC 或 Committer 帮忙分配。有时我也会浏览社区的 Jira 列表,查看哪些 issue 是我认为可以解决的,并将其加入我的 issue 列表中。在提交 PR 后,我会继续@可以帮忙 review 的人。有时候就在等待 CI 结果时,第二天就发现已经有 PMC 帮忙 Review 了,一看还是 Till 这些社区大咖。虽然那时候我和社区大佬们并不熟悉,但他们都非常友善,愿意接纳新人。随着在社区的不断积累,我对 Flink 系统的深入了解,会发现更多可以优化的 issue,同时也会提交 issue 甚至 FLIP,与更多志同道合的小伙伴一起交流。
在 Flink 社区项目中,我主要的投入是推动支持 Streaming Warehouse 相关 Feature ,包括 JDBC 和 Gateway 接入、Flink OLAP 相关 Feature 的实现。除了在研发方面,我也在社区各类邮件组的讨论和答疑中投入了不少精力,在这个过程可以和社区中不同国籍、不同公司、不同背景的同学有更好的沟通和交流,同时了解其他公司用户对 Flink 的使用方式和场景,将会对我们在后续的工作中有一定的启发。
除了Apache Flink 社区,我目前还在参与Apache Paimon 社区。目前我们团队除了鼓励大家参与 Apache 开源社区,将自己在内部解决的相关 issue 贡献到社区以外;也在和 Paimon 社区合作,推动 Streaming Warehouse 的数据血缘管理、流式计算回溯和订正、流批一体 ETL 一致性等方面的重大 Feature 开发。
胡伟华:
我一直认为参与开源社区对个人、团队、公司和社区都具有积极的影响:对个人而言,可以在与其他优秀成员讨论中提高技术水平,拓宽更多方案思路。对团队而言,可以促进创新和发展,避免闭门造车,尤其对字节跳动这样使用 Flink 引擎的团队,更需要深度参与社区。对公司而言,参与开源社区可以提高品牌形象和技术实力。而越多人参与社区,也越有利于社区的发展和用户问题的解决。
以我个人经历举例,在推动大作业的性能优化过程中,我们采用了批量部署方案,对 Flink 任务的部署流程进行了较大的改动。不过,经过与社区其他成员多次深入讨论后,我们决定将优化方向转为在 TaskManager 方面增加相关的缓存。这既能够实现优化目的,又能够大大简化对原有流程的修改。这让我深入了解了社区的工作方式,并感受到了社区力量的巨大。
参与开源让我在技术能力、思维扩展上都收获颇多。在技术方面,我可以向专业的 Committer、PMC 小伙伴学习到了很多,在一次次交流和严格 CodeReview 中收获了技术上的成长。在思维扩展上,我在回答社区用户提问的过程中看到更多的业务使用场景,扩展了我的思维。
方勇:
参与开源对我而言也是“充电”。总结而言有以下几大电力:
胡伟华:
我建议的是胆大心细、积极参与。
胆大指勇敢地在社区表达个人意见,社区的小伙伴会积极聆听意见,当你的意见被采纳并讨论时,您将感受到满满的成就感。心细方面,在社区,大部分小伙伴是业余时间参与,并且主要采用异步沟通方式,一个完整和清晰的发言可以大大减少沟通成本。
积极参与不仅仅局限于提交代码,社区的讨论与用户的答疑也是很好的成长机会。
方勇:
主要有两点建议:保持热情和持续投入。
开源社区非常开放,你可以积极参与感兴趣或了解的问题。提供个人看法或者实践经验,帮助推动相关问题的解决或者 Feature 设计。
同时,参与社区是一个非常长期的事情,不是参与一两个月就能获得非常好的回报,需要持续地投入,不管是参与邮件组讨论还是开发 issue。只要能坚持上述两点,在帮助社区建设更好的同时,相信你也一定能在技术和影响力等方面有非常好的提升。
字节跳动流式计算团队负责字节跳动内部流式计算应用场景,支撑了包括机器学习平台/推荐/数仓/搜索/广告/流媒体/安全和风控等众多核心业务。主要解决超大单体作业(千万级别 QPS),超大集群规模(上万台机器)应用场景所面临的问题,对 Flink 在 SQL、State&Checkpoint、Runtime 等方向都有深度优化。
2022年团队支撑研发的计算引擎 “ 流式计算 Flink版 ”产品上线 火山引擎 ,正式对外提供云上计算能力。