整理:許世偉、秦佳奇(Flink 社群志願者)
校對:秦佳奇、許世偉(Flink 社群志願者)
摘要:本文根據 Apache Flink 系列直播整理而成,由 Apache Flink Committer,阿裡巴巴技術專家付典分享。主要内容如下:
- 參與開源社群的意義
- 參與開源社群的原則
- 如何參與 Flink 社群
- 如何送出第一個 PR
Tips:點選下方連結可回顧更多社群成長類教程~
社群成長:
https://ververica.cn/developers/flink-training-course3/
本文首先介紹為何要參與開源社群以及在參與開源社群的過程中需要注意什麼,然後重點介紹如何參與 Flink 社群以及在社群裡面送出 PR 的整個流程。
一、參與開源社群的意義
目前很多大公司都紛紛擁抱開源,從最初隻是開始參與開源社群,到近年科技巨頭們又陸續将自己的一些項目開源化。作為一個碼農來說,參與開源社群肯定對于自己的職業發展是有着巨大好處的。
另外,參與開源社群,你可以和相關領域裡面最優秀的人一起工作交流,快速的提升自己。不管在技術讨論、還是貢獻代碼方面,所有的過程都是公開的。參與到開源社群的讨論交流中,我相信你看到的不僅是最終代碼所呈現出來的結果,而且還能了解到更多的設計思想,做到知其然,知其是以然。在社群中,每個人都希望将自己最好的一面給展示出來,這個無疑是促進自身不斷進步的動力。
在享受開源社群帶給我們好處的同時,我們也可以反哺開源社群。改了某幾行代碼,或者修正了文檔上面某個小錯誤,這些都是在為開源社群貢獻自己的力量。我們與社群之間要互相 build trust,可以從簡單的貢獻做起。不要因為對某個領域不熟悉或者說貢獻太小而有放棄的想法,這是不太對的。
當我們為開源社群做的貢獻足夠多之後,可能會得到社群的認可,成為社群的 Contributor、Committer、PMC、Apache Member 等等,這是社群對我們個人能力的一種認可。
總結而言,參與開源的意義在于:
- 順勢而為
- 無國界導師
- 為世界帶來微小而美好的變化
- 業界身份證
二、參與開源社群的原則
參與開源社群,有兩個基礎且重要的原則需要大家注意:
- 公開溝通
公開溝通是參與開源社群很重要的原則。任何問題及所有的讨論記錄最好都公開化,做到可追溯,盡量避免私下讨論,這樣才能更好地發揮社群的力量。
- 保持尊重
在社群裡面,要保持互相尊重。社群的貢獻是以自願為基本原則的,在社群的讨論中要避免情緒化,絕對禁止人身攻擊。
三、如何參與 Flink 社群
1.訂閱郵件清單
關于郵件清單的更多具體資訊: https://flink.apache.org/community.html#mailing-lists
參與 Flink 社群,先從訂閱郵件清單入手,上面的表格是 Flink 社群常用的幾個郵件及郵件用途資訊,建議大家先訂閱這幾個郵件。訂閱方式如下:
1.發送郵件到相應的郵件清單進行訂閱
[email protected]
[email protected]
2.回複确認郵件
2.參與使用者郵件清單讨論
■ 2.1 使用者郵件提問注意事項
- 事先搜尋有無類似問題
這幾個地方可能有你想要的答案:
Apache Pony: https://lists.apache.org/[email protected] Nabble: http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/ StackOverFlow: https://stackoverflow.com/questions/tagged/apache-flink
- 問題描述應盡可能詳細
例如:使用的 Flink 版本、planner、和問題相關的配置、異常 log、複現問題的步驟;如果可能的話,提供可複現問題的最小功能代碼(盡可能去除無關代碼);盡量不要在郵件裡直接貼圖檔,如果确實有需要,先将圖檔上傳到外部網站,然後把圖檔連結貼到郵件裡。
- 避免将 Flink 使用問題發到開發郵件
- 盡量用英文在 user 郵件中讨論
■ 2.2 使用者郵件提問正反面示例
- 反面示例
❌ 缺少Flink版本
❌ 缺少所用planner
❌ 缺少示例代碼
- 正面示例
✅ 所用Flink版本
✅ 作業并發度
✅ 示例代碼
✅ sink的輸出結果
✅ 較長的描述了疑惑的地方
■ 2.3 使用者郵件回答問題注意事項
- 先弄清楚問題再回答(如果對方提供資訊不夠,可追問清楚)
- 參與任何自己感興趣的話題,當然最好是自己熟悉的領域
- 有不确定的地方,可以抄送可能對這個問題更熟悉的人
- 回答應該條理清晰、盡可能全面
3.參與開發郵件清單讨論
- 大功能、先讨論、後開發 [詳見:讨論 -> 投票 -> 開發 -> 合并]
- 郵件标題格式 “[DISCUSS] XXX”
- 選擇熟悉或感興趣的領域,參與讨論
四、如何送出第一個 PR
1.注冊 Apache JIRA 賬号 / GitHub 賬号
2.下載下傳 Flink 代碼
■ 2.1 Fork Flink 項目到自己的 github 賬号下
■ 2.2 Clone Apache Flink 的代碼倉庫到本地
git clone
https://github.com/apache/flink.git■ 2.3 添加自己 github 賬号下 cloned 的 Flink 倉庫
git remote add dianfu https://github.com/dianfu/flink.git
這裡的 dianfu 這個名字是随便起的,它在本地代表遠端倉庫的别名。
3.開發環境準備
■ 3.1 開發環境
■ 3.2 建構項目
在項目根目錄下建構,指令如下:
mvn clean install -DskipTests
建構完成後,出現 build-target 目錄。
4.建立 JIRA
■ 4.1 大功能、先讨論、再建立
在Flink裡面所有大的功能或者是說涉及 API 的改動,都需要先建立 flip。再經過社群讨論,讨論通過之後才能進行開發。
■ 4.2 現存 JIRA
如果有 owner,需要先征求 owner 的同意
沒有 owner,在 JIRA 上面 ping 相關子產品的 committer,将 JIRA assign 給你(Contributor 沒有權限 assign JIRA)。送出 PR 之後,需要 committer 進行review
■ 4.3 建立 JIRA Flink JIRA
- 标題清楚
- 需要标清楚涉及的子產品、出現問題的版本
- 不要使用中文
5.代碼開發
■ 5.1 開發注意事項
- 開發前請閱讀 code style
- 避免引入新的依賴。若有,則依賴的 license 需要滿足一些要求
- 避免引入新的 scala 檔案
- 涉及 API 的修改,需要先讨論再修改
- 避免和目前 PR 無關的修改
- 邏輯上獨立的修改,可拆分成不同的 commit,送出資訊能反應出修改内容
■ 5.2 Test Case
- 能用 UT 的,盡量不要用 IT
- 參考已有 Test Case 的寫法
- 不要過度測試
■ 5.3 注釋、文檔
- 文檔風格
- 英文 / 中文文檔都需要更新
- 中文文檔裡的連結應該指向其它中文文檔
- 更新文檔、實時檢視
cd docs & sh build_docs.sh –p
通路
http://0.0.0.0:4000/可以看到文檔效果
■ 5.4 送出代碼之前
對于 Java 代碼需要在所修改子產品下執行:
mvn clean install
對于 Python 代碼需要在 flink-python 子產品下:
./dev/lint-python
6.送出 PR
■ 6.1 Commit Message
- 格式:FLINK-XXX描述
- 每個 commit 應該邏輯獨立
■ 6.2 Push 到個人 GitHub 賬号下 fork 的 Flink 倉庫
git push dianfu branch_name
example:git push dianfu FLINK-16667
■ 6.3 Open PR
上一步 push 完之後,Fork 的 flink 項目會立馬顯示出剛才 push 的分支,然後點選右邊的按鈕 (Compare & pull request),就會進入到 PR 的送出頁面。
PR 的送出頁面,包括了這幾種資訊:
PR送出到哪裡:官方flink倉庫的branch名字
PR來自哪裡:個人flink倉庫的branch名字
Able to merge:是否有沖突
PR标題:[FLINK-XXX][python] Support converting ...
PR描述資訊
當 PR 送出之後,就會在對應的 JIRA 上面自動生成 PR 連結。
7.測試實驗室
■ 7.1 關注實驗室的測試結果
當你送出一個 PR 之後,就會觸發實驗室進行測試。目前是有兩個實驗室的一個 Travis,一個是 Azure。這個是由于曆史原因造成的,目前 Flink 實驗室正從 Travis 遷移到 Azure。在遷移完成之前,PR 需要兩個實驗室都跑通過才能 merge。從下面的圖中可以看到兩個實驗室測試都已認證【SUCCESS】。
■ 7.2 private 個人實驗室
如果實驗室測試結果失敗,可以點選失敗連結進入實驗室,檢視 log 詳情。
8.跟進 review 回報更新 PR
■ 8.1 每一個 review comment 都應該處理
- 接受的 comment,直接在新的 commit 裡修改即可
- 有不同意見的 comment 應該提出來,而不要默默忽略
■ 8.2 盡量追加 commit,而不是把新的 commit 和之前的 commit squash 到一起
■ 8.3 修改之後,push 到之前的 branch 即可
git push dianfu branch_name
■ 8.4 PR 時間較久,應先 rebase 最新的 master
git checkout master
git pull
git checkout branch_name
git rebase master
git push dianfu branch_name -f
■ 8.5 關注更新之後的 PR 的測試結果
■ 8.6 在 PR 頁面 ping 下 Reviewer
■ 8.7 PR merge 之後,關注下 build 郵件清單
■ 8.8 Flink contributors
如果你貢獻多了之後,可以在 Flink contributors 這個頁面裡看到你的貢獻,另外在個人的 github 頁面,也能看到貢獻的記錄。
五、其它參與方式
1.技術分享,比如直播、meetup、部落格等
Flink 社群直播及 Meetup 嘉賓正在征集中,如果您有想與大家分享的主題,填寫下方問卷即可與社群相關同學聯系:
https://survey.aliyun.com/apps/zhiliao/SJQZ5xRkK2.文檔貢獻,比如文檔補充、糾錯、翻譯等
社群除文檔貢獻外,還有活動、直播、Meetup 等内容的文章整理,感興趣的同學可填寫下方問卷留下您的聯系方式,小松鼠大學營期待您的加入!
https://www.wenjuan.com/s/InAJjm6/3.檢查即将釋出的 Release
4.代碼 Review
除此之外,您還有多種方式可參與社群,大家請關注社群最新動态~
總體而言,本文主要向大家重點介紹了如何參與 Flink 社群以及在 Flink 社群送出 PR 的整個流程。接下來,大家可以從自己感興趣的子產品開始,積極地參與 Flink 社群,提升自身能力。或許,下一個 Committer 就是你!
作者介紹:
付典,Apache Flink Committer,阿裡巴巴技術專家,目前專注于 PyFlink 項目的開發。