教你如何成为开源项目SeaTunnel的贡献者

Posted Maynor学长

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了教你如何成为开源项目SeaTunnel的贡献者相关的知识,希望对你有一定的参考价值。

文章目录

如何参与开源贡献

基本概念

参与开源贡献的常见方法

1)参与解答
在社区中, 帮助使用过程中遇到困难的人,帮他们解释框架的用法也算是一种贡献。
2)文档贡献
帮助框架来完善文档,比如说将英文文档翻译为中文,纠正文档里面的错误单词,这 是很多人参与开源贡献的第一步。
3)代码贡献
经过阅读源码,发现源码中有 Bug,修改后将代码提交给社区。或者,框架有一个新 的特性亟待开发,你为新功能的实现提供了解决方案,这属于代码贡献,也是一种重要的 参与开源贡献的方式。

开源社区中常见的三个身份标签

1)contributor (贡献者)
只要参与过一次贡献就算是贡献者,
2)committer (提交者)
成为 contributor 后, 如果你能保证持续贡献, 而且有扎实的技术功底, 经 PMC (管理 委员会)投票或讨论决定后,可以决定让你成为一名 committer 。Committer 和 contributor 的 区别在于, commiter 对于项目的仓库是具有写的权限的。他可以审核并合并 contributor 的 代码。而且如果成为 commiter,你还会获得一个后缀为@apache.org 的邮箱。
3)PMC (管理委员会)
Committer 中表现优秀的话,是可以成为 PMC 的。 PMC 要负责整个项目的走向,做出 一些重要的决策,要具备前瞻性的技术眼光。

如何修改 bug

背景

在我们准备这项课程的时候,实际上 kafka 输入插件,kafka 输出插件和 doris 输出插件 是各有一个 bug 的, 当时 kafka 输入插件的 bug 在社区中已经有了一个解决方案。 Kafka 输

出插件的 bug ,和 doris 输出插件的 bug 是我们来做的修改, 而且修改后的结果提交给了 SeaTunnel 社区,并且成功实现了代码合并。下面我们复现一个 doris 输出插件bug 的场景, 并且在这个基础上向大家讲解如何一步步去参与开源贡献,成为一名源码贡献者。

问题复现

1)场景
当时, 向 doris 插入数据时会抛出一个 ClassCastException,也就是类型的强转错误。 这 里会报 Java.Util.ArratList 不能强转为 java.lang.CharSequence 。在反复确认我们的配置文件
写的没问题后。我们仔细阅读了一下控制台打印的栈追踪信息。

2)问题定位
通过最后打印的栈追踪信息,我们可以知道出错的位置在 DorisOutPutFormat.java 文件
的第 210 行, 于是我们需要去idea 里面打开源码看一下这里的代码是怎么写的。

分析问题

定位到 210 行后, 我们看到下面的问题。
它要将一个batch (它是一个ArrayList 集合)强转为CharSequence (字符序列)。这显然是错误的。

要想解决这个问题, 我们要了解这段代码的意图。
这需要一定的背景知识, SeaTunnel 的 dorisSink 其实是依托于 doris 的 stream load 这种 导入方式来实现的。而 stream load 其实是通过 http 请求的形式,向 doris 导入数据。而且 doris 提倡提交数据的时候一定要成批地向 doris 导入数据。如此一来,我们知道bacth 就是 用来积攒数据的一个集合,而向远端通过 http 发送数据必然要经过一个序列化的过程。结 合上下文来看, 我们可以判断这段代码的目的,就是要将 batch 里的所有数据,按照某个规
则转为字符串, 为 http 请求做准备。 分析过程如图所示。

确定问题的解决方案

我们需要看一下 String 提供的这个join 静态方法,对参数的要求。

我们发现, join 方法的第二个参数是一个 CharSequence 类型的可变长参数, 这意味着
我们可以向里面传递一个 CharSequence 类型的数组。那么代码可以修改成下面这个样子。

方案验证

1)重新打包
接着,我们可以重新编译这个包,把重新编译的包放到我们的集群上, 再跑一次任务 看看能不能通过。在这个过程中,因为跨平台性的问题(windows 和 linux 的路径不通用, 其 实也是个 bug),有一些单元测试我们无法通过,因此我们取个巧,用下面的方式进行编译
打包, 跳过单元测试和代码的格式审查。
mvn clean package -D maven.test.skip=true -D checkstyle.skip=true
2)使用新的包
接着, 我们使用重新编译过的 SeaTunnel 执行我们之前向Doris 导入数据的命令。

3)到我们的 Doris 上查看数据是否成功导入
这次我们的数据成功导进了 doris。而且我们的程序并没有因为类型转换错误而崩溃。

4)小结
经过上面的这些步骤,我们确信问题是出在源码的问题上。接下来我们要开始向社区
汇报这个 bug,并向社区提供我们的解决方案。

创建 issue

什么是 issue

每个 github 的仓库下都会有一个项目独立的 issue 板块。 在这个板块里面,大家可以提 出自己的问题, 也可以去和大家讨论 SeaTunnel 是否要添加一些特性。而且, 这是一个可以
汇报 bug 的地方。

开源社区通常会要求你在提交代码合并的请求前, 先去创建一个 issue。这是一个好的 习惯, 就像是我们抓贼要先立案,逮捕要先有逮捕令。创建 pull request 之前先创建 issue , 然后把 pr 关联到我们创建的 issue 上, 让每一次改动,都有据可查。

如何创建 issue

1)点击 new issue 按钮进入下一个页面

2)选择你要创建的 issue 类型, 我们选择 bugreport(bug 汇报) ,进入下一个页面

3)按照表单的提示,一步步填写完整。注意,表单提醒你,创建 issue 之前应该先去搜索
社区中是否已经有讨论同一问题的 issue 。同样的问题,无需重复。

4)按照要求填写表单后,点击下方的 Submit new issue。创建这个 issue。

5)查看我们已经创建好的 issue

创建 pull request

pull request 的意思是拉取请求, 也就是我这有代码写好了,请你把我的代码拉过去吧。 所以, 发起拉取请求之前应该要先有自己的代码。这样一来, 创建 pull request 并不是一上 来就创建, 而是要先搞好自己的代码仓库。
pull request 的简称是 pr。
5.4.1 fork 项目到自己的仓库中
对于第一次对 SeaTunnel 贡献的同学来说,应该先 fork (叉子) 官方的仓库。

点击 fork 按钮后,你自己的 github 账号上会出现一个一模一样的仓库。如下图所示。

git clone 自己 fork 的仓库

拿到这个 url,在自己电脑上的任意目录上使用下面的 git 命令去clone 这个仓库。

修改代码

1)在项目的跟目录右键,用 idea 打开我们 clone 的项目
2)在我们之前确定的位置,改代码

3)commit 提交
(这个地方应该先建一个分支,从 dev 上分出来,在新建分支的基础上 commit。这里成反
面教材了_

4)push 到我们fork 的仓库里去,这个时候在远端的目标分支上, 我们写一个新的分支名

创建 PR

1)去我们的 github 上, 看一下自己的仓库,发现它会提示我们可以创建一个pr 了。 点击这
个按钮,进入下一个页面

2)在新的页面中,按照对话框里给出的模板,说明我们这个 pr 的目的。最终,不要忘了 和你之前的 issue 关联起来,关联的方式就是直接粘贴你创建的issue 的链接。

3)全部搞定之后, 点击 create pull request 按钮,创建一个pr

4)我们还可以看到 github 会判断我们做了哪些修改。红色的地方表示我们删除的代码, 绿 色的地方表示我们新增的代码。因为 github 的差异是按行进行标记的。所以如果你就改了 一个字母。也是一个删除行和新增行的效果。

5)我们的PR 已经提交完毕,我们可以看到github会启动一个自动的检查。这个叫做CI/CD。 持续交付/持续部署的意思。简单来说,你上传的代码,云端会自动拉取,然后自动地跑一
边编译,然后进行单元测试,代码格式等一系列检查。这些测试都通过后,你的代码才有

成功成为源码贡献者

过一段时间就可以回来看一下你的 pr 了。我们看到有一个 apache member 审核了我们 的代码,并将我们的代码合并到了项目中。以后,大家使用 seatunnel 将数据从 flink 写入 doris,就有你的一份功劳了。

你的发言记录上,会出现 contributor 的标记。

弄完这些, 就算是 SeaTunnel 的源码贡献者啦。

寻找贡献机会

Apache 的开源项目中, 社区成员们通常会维护一个待办列表,里面是一些好做的任务。
适合新手上路。

以上是关于教你如何成为开源项目SeaTunnel的贡献者的主要内容,如果未能解决你的问题,请参考以下文章

荣誉加身,手摸手教你成为优质开源项目的贡献者

以贡献飞桨框架API为例,手把手教你从User进阶到Contributor

以贡献飞桨框架API为例,手把手教你从User进阶到Contributor

开源社区第一步 使用 Pull Request 向 git 仓库贡献代码

如何在Github上参与一个开源项目

如何在Github上参与一个开源项目