介绍一下我们的开源“充电之旅” - 两位新晋 Apache Flink Committer 专访

本文出自字节跳动流式计算团队的方勇、胡伟华同学专访。两位同学在 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 的调度、资源管理领域,逐步将一些字节内部的优化经验分享回馈社区。

在参与社区的过程中,我主要对社区做出了以下几方面的贡献:

  1. 积极回答用户的问题和疑惑,帮助他们更好地理解和使用 Flink;
  2. 在 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 中收获了技术上的成长。在思维扩展上,我在回答社区用户提问的过程中看到更多的业务使用场景,扩展了我的思维。

方勇:

参与开源对我而言也是"充电"。总结而言有以下几大电力:

  1. 在这个过程中更深入地了解了开源社区的运行机制,更加熟悉后续如何鼓励团队其他成员参与社区以及推动内部功能进入社区流程;

  2. 在社区交流过程中,认识了更多相关领域的伙伴,方便互相沟通,了解行业目前的进展和技术方向;

  3. 可以更及时地获取社区以及开源系统目前正在推进的技术方向和核心功能,理解相关功能的背景和方案选型,有助于更好地推动系统在公司内部的技术规划和演进;

  4. 社区对技术方案、技术实现以及相关问题的思考相对内部更注重合理性和可扩展性,这些也可以持续沉淀到团队内部,推进团队技术成长。

"先行者"的小建议

胡伟华:

我建议的是胆大心细、积极参与。

胆大指勇敢地在社区表达个人意见,社区的小伙伴会积极聆听意见,当你的意见被采纳并讨论时,您将感受到满满的成就感。心细方面,在社区,大部分小伙伴是业余时间参与,并且主要采用异步沟通方式,一个完整和清晰的发言可以大大减少沟通成本。

积极参与不仅仅局限于提交代码,社区的讨论与用户的答疑也是很好的成长机会。

方勇:

主要有两点建议:保持热情和持续投入。

开源社区非常开放,你可以积极参与感兴趣或了解的问题。提供个人看法或者实践经验,帮助推动相关问题的解决或者 Feature 设计。

同时,参与社区是一个非常长期的事情,不是参与一两个月就能获得非常好的回报,需要持续地投入,不管是参与邮件组讨论还是开发 issue。只要能坚持上述两点,在帮助社区建设更好的同时,相信你也一定能在技术和影响力等方面有非常好的提升。

字节跳动流式计算团队负责字节跳动内部流式计算应用场景,支撑了包括机器学习平台/推荐/数仓/搜索/广告/流媒体/安全和风控等众多核心业务。主要解决超大单体作业(千万级别 QPS),超大集群规模(上万台机器)应用场景所面临的问题,对 Flink 在 SQL、State&Checkpoint、Runtime 等方向都有深度优化。

2022年团队支撑研发的计算引擎 " 流式计算 Flink版 "产品上线 火山引擎 ,正式对外提供云上计算能力。

相关推荐
camellias_2 小时前
SpringBoot(二十三)SpringBoot集成JWT
java·spring boot·后端
tebukaopu1482 小时前
springboot如何获取控制层get和Post入参
java·spring boot·后端
昔我往昔2 小时前
SpringBoot 创建对象常见的几种方式
java·spring boot·后端
灭掉c与java2 小时前
第三章springboot数据访问
java·spring boot·后端
啊松同学2 小时前
【Java】设计模式——工厂模式
java·后端·设计模式
枫叶_v3 小时前
【SpringBoot】20 同步调用、异步调用、异步回调
java·spring boot·后端
源码12154 小时前
ASP.NET MVC宠物商城系统
后端·asp.net·宠物
Ai 编码助手5 小时前
Go语言 实现将中文转化为拼音
开发语言·后端·golang
hummhumm5 小时前
第 12 章 - Go语言 方法
java·开发语言·javascript·后端·python·sql·golang
杜杜的man5 小时前
【go从零单排】Directories、Temporary Files and Directories目录和临时目录、临时文件
开发语言·后端·golang