成为Apache SeaTunnel贡献者的N种方式

如何参与开源贡献

  • 参与开源贡献的常见方法有多种:

1)参与解答
在社区中, 帮助使用过程中遇到困难的人,帮他们解释框架的用法也算是一种贡献。

2)文档贡献
帮助框架来完善文档,比如说将英文文档翻译为中文,纠正文档里面的错误单词,这 是很多人参与开源贡献的第一步。

3)代码贡献
经过阅读源码,发现源码中有Bug,修改后将代码提交给社区。或者,框架有一个新的特性亟待开发,你为新功能的实现提供了解决方案,这属于代码贡献,也是一种重要的参与开源贡献的方式。

4)参与Meetup分享
参与社区定期举行的线上/线下Meetup,以讲师或志愿者的身份参与其中,参与Apache SeaTunnel实践分享、市场、运营等活动,均属于为社区做贡献。

5)投稿
撰写关于Apache SeaTunnel的话题,无论是技术部署文档,还是实践经验、参与开源分享经验总结等,都可以投稿给社区(加小助手微信17743592110),获得发表即可视为非代码贡献。

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

1)contributor (贡献者)
只要参与过一次贡献就算是贡献者,

2)committer (提交者)
成为 contributor 后,如果你能保证持续贡献,而且有扎实的技术功底,经PMC(管理委员会)投票或讨论决定后,可以决定让你成为一名committer 。Committer和 contributor的区别在于,commiter对于项目的仓库是具有写的权限的。他可以审核并合并contributor的代码。而且如果成为commiter,你还会获得一个后缀为@apache.org 的邮箱。

3)PMC(管理委员会)Member
Committer中表现优秀的话,是可以成为PMC Member的。PMC Member要负责整个项目的走向,做出一些重要的决策,要具备前瞻性的技术眼光。

如何修改bug

修改Bug是参与项目贡献的重要途径之一,下面举例说明如何修改Apache SeaTunnel项目中的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里面打开源码看一下这里的代码是怎么写的。

3)分析问题
定位到210行后, 我们看到下面的问题。

它要将一个batch(它是一个ArrayList集合)强转为CharSequence(字符序列)。这显然是错误的。

要想解决这个问题, 我们要了解这段代码的意图。

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

4)确定问题的解决方案
我们需要看一下 String 提供的这个join 静态方法,对参数的要求。

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

5)方案验证

  • 重新打包
    接着,我们可以重新编译这个包,把重新编译的包放到我们的集群上, 再跑一次任务 看看能不能通过。在这个过程中,因为跨平台性的问题(windows 和 linux 的路径不通用, 其 实也是个 bug),有一些单元测试我们无法通过,因此我们取个巧,用下面的方式进行编译打包, 跳过单元测试和代码的格式审查。

mvn clean package -D maven.test.skip=true -D checkstyle.skip=true

  • 使用新的包
    接着, 我们使用重新编译过的 SeaTunnel 执行我们之前向Doris 导入数据的命令。
  • 到我们的 Doris 上查看数据是否成功导入
    这次我们的数据成功导进了 doris。而且我们的程序并没有因为类型转换错误而崩溃。

6)小结
经过上面的这些步骤,我们确信问题是出在源码的问题上。接下来我们要开始向社区汇报这个 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。 持续交付/持续部署的意思。简单来说,你上传的代码,云端会自动拉取,然后自动地跑一边编译,然后进行单元测试,代码格式等一系列检查。这些测试都通过后,你的代码才有被合并的可能。

6)接下来你可以去干点别的,自动测试的时间会比较久,而且你需要等待社区人员注意到你的Pull Request​。

成功成为源码贡献者

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

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

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

寻找贡献机会

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

本文由 白鲸开源 提供发布支持!

热门相关:龙皇武神   如意小郎君   重生世家子   大金主,你别假正经了   国民女神:重生王牌千金