You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
8.7 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 特别放送(二)| 一篇文章带你了解参与开源社区的全部流程
你好我是胡夕。从课程上线开始我就经常被问到这样一个问题“我想参与到Apache Kafka社区应该怎么做呢”今天我就为你梳理一下参与Apache开源社区特别是Kafka社区的最佳实践步骤。
参照着这套最佳实践你能够轻松地参与到社区的日常开发中甚至是成为社区Contributor中的一员。即使你暂时不打算加入社区开发在你遇到Kafka难题时这套实践法则也可以帮助你快速地找到适当的资源节省你的时间成本。比如说在诊断很多Kafka问题时社区邮件组和Jira列表往往是比搜索引擎更好的工具。
大体上说我们参与开源社区通常需要完成5步如下图所示
![](https://static001.geekbang.org/resource/image/a0/11/a025813482db2a3e93fb6b4574e38011.jpg)
虽然我在上图为每一步都标记了序号,但这并不表示它们之间是有先后关联顺序的,你完全可以按照任意顺序去实现它们。接下来,我就带你一步步梳理这五个方面。
## 1.精通Kafka源代码
你需要非常了解Kafka的源代码毕竟我们参与到开源社区的目的就是贡献我们自己的代码。不管是要修复Bug还是想要为Kafka新增任何功能你都要提前了解相关的源码才能进行。我们目前的这门课就是帮你完成此事的。认真学完这个课程你至少可以对Kafka服务器端的源代码有一个深入而广泛的了解为你后续贡献这部分代码奠定基础。
## 2.订阅Kafka邮件组
在我看来,这是参与开源社区最重要的一步,没有之一!**订阅邮件组是及时了解社区动态最快速、最有效的手段**。Kafka邮件组的活跃程度在整个Apache社区名列前茅。
根据[Apache社区2018年度报告](https://blogs.apache.org/foundation/entry/the-apache-software-foundation-announces37)我们可以知道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邮件组发送邮件、询问问题了。不过你要记住这两个邮件组的区别。
* users讨论Kafka**使用**方面的问题。
* dev讨论Kafka**开发**方面的问题。
需要注意的是这两个邮件组每天的邮件数量非常多如果你觉得不胜其烦可以取消订阅。取消方法与订阅方法类似只是你要发送邮件给对应的取消订阅邮件地址users对应的取消订阅邮件地址是users-unsubscribe@kafka.apache.orgdev对应的是dev-unsubscribe@kafka.apache.org。
## 3.开通Jira权限
当前Kafka使用[Jira](https://issues.apache.org/jira/issues/?filter=-4&jql=project%20%3D%20KAFKA%20ORDER%20BY%20created%20DESC)进行项目管理负责Kafka的Bug管理和新功能提案的追踪。如果你要参与到Kafka社区Jira权限是不能不开通的。开通权限是什么意思呢这主要是指你要申请一个Jira的账号。账号申请完成之后你还需要发送邮件给users@kafka.apache.org申请将你的Jira ID加入到Kafka的Contributor列表中。只有Jira ID被加入到Contributor列表你才有资格认领Jira ticket也就是我们常说的修Bug。
## 4.开通KIP权限
在之前的特别放送里,我提到过[KIP](https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Improvement+Proposals)也就是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页面](https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Improvement+Proposals)点击Create KIP按钮按照页面目录结构撰写新功能提案即可。值得注意的是**一旦你创建了自己的提案页面在主KIP页面你还需要修改两个地方**。
首先,你必须更新**下一个KIP序号**,如下图所示:
![](https://static001.geekbang.org/resource/image/ff/cd/ffa044b45fa05f5065b45cf72b95f2cd.png)
其次,你必须把你的提案页面地址增加到**KIPs under discussion**表格下并注明状态Under Discussion。
除此之外你还需要发送一封邮件给dev邮件组向社区声明你创建了一个KIP想要发起新一轮的讨论。下图展示的是一封我之前负责某KIP时发起的讨论邮件
![](https://static001.geekbang.org/resource/image/ce/b6/cebc8828a9f6070a48beb60554c5c6b6.png)
把这些都做完之后剩下的事情就是等待社区开发者对此KIP的讨论了你需要做的就是随时回答大家提出的各种问题然后向大家解释为什么这个KIP是很重要的功能。
## 5.提交Pull RequestPR
参与社区的最后一步也是最关键的一步就是向社区提交我们自己的Pull Request即PR。目前社区的PR大体分为两类普通PR和MINOR PR。
我先说下MINOR PR。顾名思义MINOR PR就是改动微不足道的那类PR比如你在阅读Kafka源码注释时发现某个单词拼写错了或者是变量命名不清晰那么针对这类问题你就可以直接给社区提一个PR。这类PR在命名时社区有个约定俗成的规范就是**它们要以“MINOR”开头**,如下图所示:
![](https://static001.geekbang.org/resource/image/c5/03/c5db8ef3ed8e3a038086e3adb66ceb03.png)
给社区贡献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社区甚至是开源社区的初衷或者你过往参与开源社区的一些有趣经历你觉得做这些事情最大的意义或价值是什么
欢迎你在留言区畅所欲言,跟我交流讨论,也欢迎你把今天的内容分享给你的朋友。