码住!Flink Contributor 速成指南

简介: 不管初衷是什么,Flink 都非常欢迎大家一起建设和完善社区。在开始具体的贡献步骤之前,我们先简要介绍一下参与贡献的几种途径,以及 Clarify 关于开源贡献的一些固有印象。

作者:伍翀(云邪),Apache Flink PMC,阿里巴巴技术专家
整理者:陈婧敏(清樾)

本文整理自 Apache Flink PMC 伍翀(云邪)直播分享,旨在为具备一定大数据基础、对 Flink 社区发展感兴趣的同学提供参与贡献的一些经验和流程。

为什么要参与开源社区

作为 Apache Flink PMC member 的云邪根据自身经历总结了参与开源社区发展的三个主要原因。

flink-why-contribute.png

1. 开源精神

「自由」可谓是开源精神的核心,自由意味着世界范围内无拘无束的交流分享与思维的碰撞。云邪自述“拿我个人来说,我在大学阶段正好经历了 Hadoop、Spark 大火的阶段,那时候就特别憧憬做开源,特别崇拜能熟读源码的大神,特别希望自己有一天也能够写很多开源代码,让自己写的代码被上万的用户使用。所以对于我来说,参与开源就像是一个爱好一样,愿意为之付出时间和努力。我也很幸运地在毕业后就接触上了开源社区。”

2. 技术成长

参与开源是提升个人代码质量的好方法。开源社区对于代码和设计要求非常高,不像一些内部项目相对随意。对于设计,Flink 社区有一套专门的 FLIP 机制,任何重大的贡献都会经过公开和细致的讨论。对于代码,Flink CTO 亲自写了 26 页的 Code style 指南,此外每次提交 PR 后也会收到 Committers 的 Review 建议,所以持续地在开源社区里贡献代码,对于个人的系统思维能力和代码能力都有很大提升。

3. 职业规划

如果你在准备跳槽或是公司内部晋升,除了现有的 Title 外,参与开源社区的经历绝对是一个加分项,因为开源产品本身就带有网红的标签,而参与其中则有助于提高自身的影响力 & 结识同行业的大牛们。开源贡献除了能直接地反映你的代码能力外,成为 Committer 甚至 PMC member 更能证明你的热情 & 毅力 & 沟通协作方面的 Soft skills(因为这需要你持续完成高质量的贡献,与社区其它成员共同协作,在有意见分歧的时候保持开放友好的态度 _etc_.)。

如何成为 Contributor

1. 贡献途径

不管初衷是什么,Flink 都非常欢迎大家一起建设和完善社区。在开始具体的贡献步骤之前,我们先简要介绍一下参与贡献的几种途径, 以及 Clarify 关于开源贡献的一些固有印象。

flink-contribution-way.png

说起开源贡献可能大家的直观反应就是贡献代码。不过在 Flink 社区中有非常多的参与贡献的方式,包括文档、翻译、答疑、测试、以及代码等,并且社区将文档贡献放在第一位,代码贡献放在最后。因为 Apache 社区对于代码贡献的态度是  Community Over Code,Flink CTO 更是亲自发推说明代码贡献的“不重要性”。

flink-community-over-code.png

为什么呢?因为开源项目的良性发展并不是简单地依靠狂怼代码,没有社区的开源项目,其源码会一直停留在「孤芳自赏」阶段。“我有一个想法,这是我的代码”可能是最糟糕的贡献方式,因为在没有任何文档的情况下 Committers 不得不通过代码去尝试理解贡献者的意图,这种反向推导往往会耗费 Committers 和贡献者本人额外的时间精力,导致非常高的沟通成本和更久的代码合并周期。另一方面,缺少严格的代码审查机制和规范的 Pull Requst 流程会导致开源代码的质量大幅降低,这就是为何小到发现 typo、简单的 bugfix 都需要有一套完整的机制,而大到一个模块的重构、feature 的新增更需要提供详细的设计文档、发起投票。这部分工作所占的比重非常高,所以真正到写代码的阶段是自然而然水到渠成的。而完善详尽的文档、及时准确的答疑、百花齐放的技术博客才能打造优质的社区生态,吸引更多的用户参与使用,进而反哺社区。拿最近成为 Committer 的 Konstantin 和 Seth 来说,他们提名的主要贡献就是文档,这也可以看出 Flink PMC 委员会对于文档贡献的认可和重视,特别是贡献中文文档(翻译)的门槛相对较低,只要有一定英语基础 & 文字表达能力即可,属于最适合初学者开始开源贡献的起步选择。Flink 社区目前正在招募翻译者,下面也会详细介绍翻译的具体流程。

2. 准备工作

  • 订阅邮件列表
    Flink 社区讨论主要通过邮件完成,所以参与贡献的第一步是加入到邮件列表获取最新的讨论信息。主要的邮件列表有用户邮件列表(_user@flink.apache.org & user-zh@flink.apache.org)和开发者邮件列表(dev@flink.apache.org)。关于邮件列表的更多信息可以参考 https://flink.apache.org/community.html#mailing-lists_ 。发送邮件到相应的邮件列表并回复确认信息即可订阅。

E.g. 想订阅开发者邮件列表就发送无内容的邮件到 _dev-subscribe@flink.apache.org_,社区会回复一封邮件询问你是否确认加入,再回复一下确认就可以了。

Flink 社区每天来往的邮件非常多,有效整理归档可以帮忙自己快速定位相关 topic,云邪在这里分享了他的 Gmail 收件规则 _https://gist.github.com/wuchong/ad6a3bd241aca0e04eef93ae71fba73b_,可作为参考。flink-contribute-preparation-sub.png

  • 关注 JIRA 模块
    Flink 社区通过 JIRA 管理所有 Issue,所以在开始贡献前我们需要有一个 JIRA 账号。虽然 JIRA 不支持关注某个特定的模块,但我们可以使用 JIRA Filters 来跟踪自己感兴趣的模块。
    操作步骤如下
  1. 切换到 JIRA Issues 页,将搜索框从 Basic 切换到 Advanced 模式。
  1. 加入自己感兴趣的 Filter,比如以中文翻译为例, component = chinese-translation 就会筛选出所有翻译相关的 Issue,resolution = Unresolved AND assignee IN (EMPTY) 会在此基础上删选出 available 并且还没有指派给其他人的翻译任务。完整的过滤条件:project = FLINK AND component = chinese-translation AND resolution = Unresolved AND assignee IN (EMPTY) ORDER BY updatedDate DESC ,然后点击保存即可。此外可以按照自己感兴趣的模块创建多个 Filters 方便后续使用。
  • 目前 Flink 社区只有 Committer 才有权限将 Issue 指派给自己,所以如果是 Contributor 想解决它的话可以在 Issue 下方留言申请指派。一般情况下如果是简单的 typo 或 bugfix 时 Committer 会直接指派,但如果涉及到比较复杂的改动或是新的 feature 实现,在申请时就需要阐述清楚代码层面的实现方案,与 Committer 达成一致后才会指派。另外可以点击 Issue 页面上的 Watchers 添加关注,后面这个 Issue 的任何更新都会发送到注册 JIRA 时使用的邮箱。flink-contribute-preparation-jira.png
  • Fork Flink 仓库 & 下载 Flink 源码

首先你需要有一个 GitHub 账号,然后打开 Flink 的 GitHub 主页 https://github.com/apache/flink 点击 fork 按钮,这样就在自己的私人仓库下生成了一份镜像。

然后在本地 clone Flink 仓库,用于同步 master 代码> git clone https://github.com/apache/flink.git ${your-local-dir}

接着添加自己 fork 的仓库用于提交开发分支> > git remote add ${your-repo-name} https://github.com/${your-github-id}/flink.git> > E.g. 云邪的配置 > git remote add my https://github.com/wuchong/flink.git

开始第一个 Pull Request 之旅

对于参与社区的起步者,翻译模块通常是 “ROI” 最高的选择。因为它不仅易上手而且覆盖了标准贡献流程,分分钟让你变身 Apache Flink Contributor。下面我们将通过一个中文翻译例子来展示完整的 Pull Request(以下简称 PR) 流程。不过在起飞前,我们需要先了解翻译规范,这里简要总结三点:

  • 使用纯文本工具进行翻译
  • 汉字与英文、数字之间需要有空格
  • 中文文档链接需要在相应英文文档的 baseUrl 后添加 zh 适配

在上述准备工作完成后,我们就进入激动人心的实战阶段了。

Step1:申请成为某个 JIRA Issue 的 Assignee。由于这里是演示任务,所以我们打开事先准备好的翻译任务 FLINK-17939 Translate "Python Table API Installation" page into Chinese,将它 assign 给自己(云邪)。


flink-contribute-demo-assign-phase.png

Step2:开始工作 & 检查待提交的内容。注意所有文档都以 .md 为后缀,中文文档名会有 zh 标识符,初始状态下中文文档里的内容都是英文。我们切换到本地仓库切换到 docs 目录下找到要翻译的文档,就可以遵循翻译规范开始工作了。

flink-contribute-demo-translate-phase.png

翻译工作完成后,最好在本地进行渲染查看效果后再进行提交,方法如下:

切换到 docs 下的 docker 目录启动 docker 环境

cd ${your-local-dir}/flink/docs/docker
./run.sh

紧接着编译本地文档,一般来说需要 1 ~ 2 min

./build docs.sh -p

然后打开 localhost:4000 切换到中文版就可以检查渲染后的文档,比如排版格式及页面里的超链接能否正常打开等等,确认无误后就可以提交了。注意:要为指向其他文档的超链接做中文适配。

flink-contribute-demo-compile-phase.png

Step3:提交阶段准备。最佳实践是创建一个用于提交的分支,将改动提交到这个分支上。比如这里创建一个叫 installation-translate 的分支并切换过去。

git checkout -b installation-translate

Flink 社区对 Commit Message 的格式有一定要求,一般是
[${jira-issue-id}][${affected-component}] ${jira-issue-title}

以 Demo 为例,就是 [FLINK-17939][docs-zh] Translate "Python Table API Installation" page into Chinese


在本地提交后就可以通过下面的命令把改动推送到自己 fork 的远程私有仓库。

git push my installation-translate

Step4:准备 PR。在将变更推送到自己 fork 的远程仓库后,Github 会自动创建一个新的 PR 并返回 PR 页面链接 [https://github.com/apache/flink/pull/12343](https://github.com/apache/flink/pull/12343),在此基础上需要填写如下信息,从而方便 reviewer 快速了解待 review 的 PR,提高合并效率。

  • What is the purpose of the change(PR 目的)
  • 一般来说可以使用 JIRA Issue description 来描述
  • Brief change log(PR 涉及到的 Commits 做了哪些改动)
    这个按需填写即可。比如翻译任务就可以写 translateflink/docs/dve/table/python/installation.zh.md。如果是较复杂的改动,涉及到多个提交的话,最好按提交顺序说明简要总结每个提交的内容并附上 Commit log 链接。

后面三个是选择题,按需勾选即可:

  • Verifying this change(确认改动了哪些内容)
  • Does this pull request potentially affect one of the following parts(确认改动的影响范围)
  • Documentation(改动是否需要新文档)

flink-contribute-demo-pull-request-phase.png

Step5:等待 Committer review。此时刷新 JIRA 页通常可以看到 Issue Links 上的 PR 更新。一般来说将 JIRA issue 指派给我们的 Committer 都会定期去 check 是否有他关注模块的 PR,偶尔会遇到 Committer 很忙的情况时也可以在 PR 里 @ 某个 Committer 来帮忙 review 自己的提交。通常 Committer 都会给出一些意见,提交者做出回复,有时可能还需要做出修改 & 再次提交。需要注意的是 Flink 社区不建议使用 git squash 将多次提交进行合并压缩,因为这会丢失掉历史改动记录,建议修改后直接 append 到原来的 Commits 上即可。有时这一步可能会反复多次 & 会有多个 Committers 参与,直到提交者和 Committers 达成一致。对于 Contributor 来说整个 PR 到这一步就结束了,后续 Committer 会将其合并到 master 分支并关闭 PR。

简要总结一下,对于 contributor 来说完整提交 PR 的步骤如下所示。

Step1:在 JIRA 上认领感兴趣的 Issue,请 Committer 指派给自己。
Step2:完成 Issue 任务,做提交前的检查。
Step3:按规范填写 Commit 信息,并提交到远程私人仓库。
Step4:按规范填写 PR 信息,等待 Committer review。
Step5:处理 Committers 的意见,有时包括修改代码,重复此步骤直到 Committers 一致认为改动没有问题。

恭喜你已经成为了 Flink Contributor!Flink 每个版本的 Release Announcement 都会有一项 List of Contributors 列出所有贡献者的名单,同时 GitHub 贡献者页面上会列出历史累计 top 100 的贡献者名单。

flink-contribute-announcement.png

如何成为优秀的 Contributor

提交第一个 PR 只是万里长征的第一步,那如何成为优秀的 Contributor 乃至 Committer 呢?下面总结了三个 tips 或许可以帮到你。

1. 积极参与用户答疑

flink-contribute-user-email.png

Flink 社区非常鼓励能有更多的人参与到用户邮件列表中来,2019 年 Apache 财报显示 Flink 社区的邮件列表活跃度位列第一。社区每月都会统计各个邮件列表中积极回答问题的贡献者,会从这些活跃的贡献者中寻找潜在的 Committer 候选人。

2. 代码质量赢得社区信任

对于代码贡献者,最佳实践是:

  • 遵循 Code style 规范,在 IDEA 配置 checkstyle.xml 随时检查,避免 PR 中出现 style 不规范等低级问题。
  • 认真填写 PR 描述模板,尤其是“Brief change log” 部分,可参考 https://github.com/apache/flink/pull/7264和 https://github.com/apache/flink/pull/10013
  • 任何新增功能都要有测试覆盖,倾向于单元测试,而不是集成测试。
  • 任何新增功能都要同步覆盖文档,中英文文档都需要更新或建立 Issue。
  • 关注 Azure 实验室的测试结果。

3. 具有社区意识

最后一点,Contributor 或者 Committer 的头衔除了给我们个人带来“职业光环”外,更重要的是带来一份责任感,发自内心地帮助社区变得更好。比如不挑活、帮助新人成为贡献者、帮助 review 新增 PR(Review指南)等等。

最后,借用「小王子」里的经典台词 “It is the time you wasted on your rose that makes your rose important.” 祝大家在成为优秀 Contributor 的路上持续前进。

 

原文链接
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514957.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机访问真机调试显示: Cannot add property markTimeline, object is not extensible 怎么解决

实战 \SpringBootVue3 项目实战,打造企业级在线办公系统 3-2 用户登陆系统的流程说明 手机访问真机调试显示: Cannot add property markTimeline, object is not extensible 解决方案: 手机开热点让电脑连接,windows防火墙关闭…

浅谈MaxCompute资源规划管理及评估

简介: 本文主要介绍如何进行MaxCompute存储资源和计算资源的评估及规划管理。 一、MaxCompute资源规划背景介绍 MaxCompute资源主要有两类:存储资源、计算资源(包含cpu和内存)。存储资源用于存储MaxCompute的库表数据,计算资源用于运行sql、…

如何无缝迁移 SpringCloud/Dubbo 应用到 Serverless 架构

作者 | 行松 阿里巴巴云原生团队 本文整理自《Serverless 技术公开课》,“Serverless”公众号后台回复“入门”,即可获取系列文章 PPT。 背景 通过前面几节课程的学习,相信大家对于 SAE 平台已经有了一定的了解,SAE 基于 IaaS 层…

从程序媛到启明星辰集团云安全总经理,郭春梅博士揭秘云时代安全攻防之道...

从无序中寻找踪迹,从眼前事探索未来。2021 年正值黄金十年新开端,CSDN 以中立技术社区专业、客观的角度,深度探讨中国前沿 IT 技术演进,推出年度重磅企划栏目——「拟合」,通过对话企业技术高管大咖,跟踪报…

汽车仿真效率30%↑、药物研发效率20倍↑,阿里云获HPC CHINA 2020“最佳行业应用奖”

简介: 近日,HPC CHINA 2020 大会以线上线下——双线联动的形式同步召开,近 300 位重量级高性能计算(超算)领域专家学者与业界精英人士、CCF 高专委委员汇聚郑州,共同探索高性能计算的发展。 在本届 HPC CH…

linux 安装mysql5.7.25_生产版本

文章目录一、配置安装1. 部署总览2. 下载软件3. 解压重命名4. 创建组5. 安装数据库6. 配置my.cnf7. 添加开机启动8. 配置数据木库9. 启动mysql10. 登录修改密码11. 允许远程连接一、配置安装 1. 部署总览 服务器端口说明192.168.52.1223306master 2. 下载软件 mkdir /app cd…

山石网科发布重磅容器安全产品“山石云铠”,云安全版图再下一城

编辑 | 宋 慧 出品 | CSDN云计算 5月18日,山石网科正式发布了云安全的重磅新品——山石云铠。至此,山石网科云计算安全版图补全“容器安全”板块,已完成目前主流虚拟化技术及云服务场景网络安全产品的全面覆盖。 虽然是非常重要的产品发布&…

平台式可复用的应用集成能力,助您敏捷、高效的完成企业数字化转型

简介: 企业数字化转型往往是一个长期持续的过程,产品变革和技术迭代也在加速演进,连接性是数字化转型的关键推动因素,甚至将决定成败。为了应对普遍的集成要求,企业需要新一代更敏捷的集成能力框架,基于高效…

阿里云DNS 新增云上线路的智能解析功能

简介: 企业在云上部署单元化架构或内部服务链路时,需要考虑让数据(单元)离用户更近,避免跨单元获取数据,以此来满足自身低延时的诉求。阿里云DNS 新增基于云上链路的调度功能,进一步优化DNS智能…

进击的数据中台,企业数字化转型的新引擎

经历过“追捧”和“质疑”等种种考验后,当前,数据中台已经走到验证其价值的关键路口。 数据中台是企业数字化转型新引擎 在人工智能、大数据等技术发展和企业数字化转型加速的双重驱动下,2019年,数据中台在众多赛道中脱颖而出&a…

关于低代码真实技术趋势,听低代码巨头 Mendix 怎么说

作者 | 宋慧 出品 | CSDN云计算 在 2021年初正式宣布进入中国市场 之后,Mendix 在近日向媒体重点披露了关于低代码的技术方法论,以及近四个月在中国市场的进展。 Mendix 的低代码技术方法论 对于低代码常被讨论的模型驱动部分,Mendix 希望做…

架构设计的本质

简介: 实际上架构只是系统设计里面的一个重要环节,除了架构还包含了商业诉求,业务建模,系统分析,系统设计等重要领域。本文尝试从更高视角重新审视架构设计的工作,把架构设计的上升到系统设计的立体空间去探…

ios 蓝牙命令发送_实战恢复cisco 2950交换机的IOS

本来想用两台思科交换机做实验的,可是通过console口进入其中一台交换机后却发现这个台交换机的IOS文件丢失了。本来正常进入交换机后应该是首先进入到用户模式的,而且提示符应该是“>”,而现在提示符却成了“:”,如…

还在担心无代码是否威胁程序员饭碗?

作者 | 伍杏玲头图 | 下载于ICphoto出品 | CSDN云计算(ID:CSDNcloud)近几年来,“低代码/无代码”概念广为热议。然而低代码并不是新鲜词,实则是IT 界对简化代码开发的需求促使。早在 1982 年,詹姆斯马丁在《…

过Serverless技术降低微服务应用资源成本

前言 在大型分布式IT架构领域,微服务是一项必不可少的技术。从本质上来讲,微服务是一种架构风格,将一个大型的系统拆分为多个拥有独立生命周期的应用,应用之间采用轻量级的通信机制进行通信。这些应用都是围绕具体业务进行构建&a…

ethercat 网卡不兼容_曾经的洋垃圾万兆网卡无人问津因为一张转接卡如今身价暴涨数十倍...

今天老水要跟大家介绍的是最近非常火爆的ocp万兆网卡,为啥非常火爆呢?因为他的价格非常的低廉,性能非常的强劲,最开始的时候售价只要8块钱一张,但是却无人问津,这又是为啥?ocp网卡视频&#xff…

在淘宝,我们是这样衡量代码质量的

简介: ![img](https://img.alicdn.com/tfs/TB1ZTW4VEY1gK0jSZFMXXaWcVXa-2304-1194.png) **越高级别的程序员往往越看重代码质量。** 本篇文章主要聊一下在团队开发过程中,如何做到代码质量的管控与提升。首先需要有一套规范,定义什么是好的代…

SpringBoot项目在logback.xml中读取application.properties中配置的日志路径

文章目录一、问题二、原因三、LOGBACK.XML中读取配置中的日志路径方案3.1. 方案一3.2. 方案二一、问题 在SpringBoot项目,使用logback.xml中配置日志的存储位置时,读取application.properties或application.yml中配置的路径,在logback.xml中…

Java知识全面总结:并发编程+JVM+设计模式+常用框架+....

本文整理的Java知识体系主要包括基础知识,工具,并发编程,数据结构与算法,数据库,JVM,架构设计,应用框架,中间件,微服务架构,分布式架构等内容。同时也有作为程…

智能消息服务-数字短信使用FAQ简介: 数字短信是基于普通短信,通过一套编码技术实现的短信服务。它能把视频、音频、网页、GIF图、文字等多种表现形式通过多媒体短信形式触达用户。本文将带你了解阿里云通信

简介: 数字短信是基于普通短信,通过一套编码技术实现的短信服务。它能把视频、音频、网页、GIF图、文字等多种表现形式通过多媒体短信形式触达用户。本文将带你了解阿里云通信数字短信产品的开通与使用。 一、数字短信功能如何开通? 1.开通…