你好,我是胡夕。从课程上线开始,我就经常被问到这样一个问题:“我想参与到 Apache Kafka 社区,应该怎么做呢?”今天,我就为你梳理一下参与 Apache 开源社区,特别是 Kafka 社区的最佳实践步骤。

参照着这套最佳实践,你能够轻松地参与到社区的日常开发中,甚至是成为社区 Contributor 中的一员。即使你暂时不打算加入社区开发,在你遇到 Kafka 难题时,这套实践法则也可以帮助你快速地找到适当的资源,节省你的时间成本。比如说,在诊断很多 Kafka 问题时,社区邮件组和 Jira 列表往往是比搜索引擎更好的工具。

大体上说,我们参与开源社区通常需要完成 5 步,如下图所示:

虽然我在上图为每一步都标记了序号,但这并不表示它们之间是有先后关联顺序的,你完全可以按照任意顺序去实现它们。接下来,我就带你一步步梳理这五个方面。

1. 精通 Kafka 源代码

你需要非常了解 Kafka 的源代码,毕竟,我们参与到开源社区的目的就是贡献我们自己的代码。不管是要修复 Bug,还是想要为 Kafka 新增任何功能,你都要提前了解相关的源码才能进行。我们目前的这门课就是帮你完成此事的。认真学完这个课程,你至少可以对 Kafka 服务器端的源代码有一个深入而广泛的了解,为你后续贡献这部分代码奠定基础。

2. 订阅 Kafka 邮件组

在我看来,这是参与开源社区最重要的一步,没有之一!订阅邮件组是及时了解社区动态最快速、最有效的手段。Kafka 邮件组的活跃程度在整个 Apache 社区名列前茅。

根据Apache 社区 2018 年度报告,我们可以知道,Kafka 的两个邮件组 users 和 dev 分别排在最活跃邮件组 Top5 的第 4 名和第 2 名,足见社区的人气之高。

Kafka 邮件组主要包含两个:users@kafka.apache.org 和 dev@kafka.apache.org。Kafka 用户在使用过程中碰到任何问题,都可以向第一个邮件组发送邮件询问,而第二个邮件组主要用于进行 Kafka 开发的各种讨论。就我个人的经验而言,dev 这个邮件组的含金量要更高一些,因为上面有很多针对 Kafka 设计以及改进建议的讨论和交流,非常值得一看。

订阅这些邮件组的方法很简单,你需要给这两个邮件组对应的订阅邮件地址发送邮件。比如你要订阅 dev 邮件组,那么可以发送一封名为“Subscribe to Kafka dev mailing list”的邮件给 dev-subscribe@kafka.apache.org,这样你就每天都能收到 dev 邮件组的邮件了。同理,你需要发送邮件给 users-subscribe@kafka.apache.org 来订阅 users 邮件组。

订阅成功之后,你就可以给 users 和 dev 邮件组发送邮件、询问问题了。不过,你要记住这两个邮件组的区别。

  1. users:讨论 Kafka使用方面的问题。
  2. dev:讨论 Kafka开发方面的问题。

需要注意的是,这两个邮件组每天的邮件数量非常多,如果你觉得不胜其烦,可以取消订阅。取消方法与订阅方法类似,只是你要发送邮件给对应的取消订阅邮件地址,users 对应的取消订阅邮件地址是 users-unsubscribe@kafka.apache.org;dev 对应的是 dev-unsubscribe@kafka.apache.org

3. 开通 Jira 权限

当前,Kafka 使用Jira进行项目管理,负责 Kafka 的 Bug 管理和新功能提案的追踪。如果你要参与到 Kafka 社区,Jira 权限是不能不开通的。开通权限是什么意思呢?这主要是指你要申请一个 Jira 的账号。账号申请完成之后,你还需要发送邮件给 users@kafka.apache.org,申请将你的 Jira ID 加入到 Kafka 的 Contributor 列表中。只有 Jira ID 被加入到 Contributor 列表,你才有资格认领 Jira ticket,也就是我们常说的修 Bug。

4. 开通 KIP 权限

在之前的特别放送里,我提到过KIP,也就是 Kafka 新功能提案。通常情况下,你不需要任何权限,就能浏览这些新功能提案。不过,如果你要提交自己的提案,那你就必须要提前申请 KIP 账号权限了,具体的做法是向 dev@kafka.apache.org 邮箱发送申请邮件。

我举个例子,你可以编写一封邮件,名字为“Granting permission for Create KIP”,正文是“Please grant permission for Create KIP to wiki ID: <your_id>”,然后发送给 dev 邮件组。大约 1 到 2 个工作日之后,你会收到一封邮件,告知你的 ID 已被赋予了权限。

这个时候,你再次进入到KIP 页面,点击 Create KIP 按钮,按照页面目录结构撰写新功能提案即可。值得注意的是,一旦你创建了自己的提案页面,在主 KIP 页面,你还需要修改两个地方

首先,你必须更新下一个 KIP 序号,如下图所示:

其次,你必须把你的提案页面地址增加到 KIPs under discussion 表格下,并注明状态 Under Discussion。

除此之外,你还需要发送一封邮件给 dev 邮件组,向社区声明你创建了一个 KIP,想要发起新一轮的讨论。下图展示的是一封我之前负责某 KIP 时发起的讨论邮件:

把这些都做完之后,剩下的事情就是等待社区开发者对此 KIP 的讨论了,你需要做的就是随时回答大家提出的各种问题,然后向大家解释为什么这个 KIP 是很重要的功能。

5. 提交 Pull Request(PR)

参与社区的最后一步,也是最关键的一步,就是向社区提交我们自己的 Pull Request,即 PR。目前社区的 PR 大体分为两类:普通 PR 和 MINOR PR。

我先说下 MINOR PR。顾名思义,MINOR PR 就是改动微不足道的那类 PR,比如,你在阅读 Kafka 源码注释时,发现某个单词拼写错了,或者是变量命名不清晰,那么针对这类问题,你就可以直接给社区提一个 PR。这类 PR 在命名时,社区有个约定俗成的规范就是,它们要以“MINOR:”开头,如下图所示:

给社区贡献 MINOR PR 是不需要事先创建 Jira ticket 的,这也是这类 PR 的一个特点。

另一类 PR 就是普通 PR 了。要提交这类 PR 前,你必须保证要修复的问题在 Jira 中存在对应的 ticket,并且最好确保 Jira 的 Assignee 是你自己。如果 Assignee 不是你自己,那说明社区中有其他人正在研究这个问题,你最好不要抢别人家的劳动果实。如果你知道了如何修复该问题,可以在对应的 Jira ticket 下留言礼貌地询问是否可以把这个 ticket 让你来修复。如果原 Assignee 同意了你的请求,你再提交自己的 PR 也不迟。

一旦提交了 PR 之后,你的代码会被社区开发者进行 Code Review,并提出很多修改意见,你需要小心谨慎地对待这些 Comment 并处理它们。当 Committer 认为你的代码满足了要求之后,他们会留言 LGTM 的字样,表明 Look Good To Me,然后通知你代码可以被合并到主干分支了。这个时候,你就正式成为了 Apache Kafka 的 Contributor。

总结

今天,我给你介绍了参与 Kafka 社区的最佳实践。我希望在学完这节课之后,你可以根据这个教程一步一步地实现成为 Kafka Contributor 的目标,甚至是成为下一个社区 Committer!当然,每个人自身的实际目标和期望不同,你也可以有针对性、有限度地参与到社区中,以满足你的实际需求。

最后,我还想跟你分享一个国人参与开源社区的建议:不要只和国内开发者进行对话,要多多和国外开发者进行交流合作。我发现,很多国内开发者只会去找 Kafka 社区中的华人帮忙解决问题,其实,社区中的国外开发人员也是非常友善和易于沟通的,我建议你也多和他们聊一聊,相信你会有更多不一样的收获。

课后讨论

你想参与 Kafka 社区甚至是开源社区的初衷,或者你过往参与开源社区的一些有趣经历,你觉得做这些事情最大的意义或价值是什么?

欢迎你在留言区畅所欲言,跟我交流讨论,也欢迎你把今天的内容分享给你的朋友。