如何参与开源贡献—SeaTunnel为例 文1
5.1 基本概念
5.1.1 参与开源贡献的常见方法
1)参与解答
在社区中,帮助使用过程中遇到困难的人,帮他们解释框架的用法也算是一种贡献。
2)文档贡献
帮助框架来完善文档,比如说将英文文档翻译为中文,纠正文档里面的错误单词,这是很多人参与开源贡献的第一步。
3)代码贡献
经过阅读源码,发现源码中有Bug,修改后将代码提交给社区。或者,框架有一个新的特性亟待开发,你为新功能的实现提供了解决方案,这属于代码贡献,也是一种重要的参与开源贡献的方式。
5.1.2 开源社区中常见的三个身份标签
1)contributor(贡献者)
只要参与过一次贡献就算是贡献者,
2)committer(提交者)
成为contributor后,如果你能保证持续贡献,而且有扎实的技术功底,经PMC(管理委员会)投票或讨论决定后,可以决定让你成为一名committer。Committer和contributor的区别在于,commiter对于项目的仓库是具有写的权限的。他可以审核并合并contributor的代码。而且如果成为commiter,你还会获得一个后缀为@apache.org的邮箱。
3)PMC(管理委员会)
Committer中表现优秀的话,是可以成为PMC的。PMC要负责整个项目的走向,做出一些重要的决策,要具备前瞻性的技术眼光。
5.2 如何修改bug
5.2.1 背景
在我们准备这项课程的时候,实际上kafka输入插件,kafka输出插件和doris输出插件是各有一个bug的,当时kafka输入插件的bug在社区中已经有了一个解决方案。Kafka输出插件的bug,和doris输出插件的bug是我们来做的修改,而且修改后的结果提交给了SeaTunnel社区,并且成功实现了代码合并。下面我们复现一个doris输出插件bug的场景,并且在这个基础上向大家讲解如何一步步去参与开源贡献,成为一名源码贡献者。
5.2.2 问题复现
1)场景
当时,向doris插入数据时会抛出一个ClassCastException,也就是类型的强转错误。这里会报Java.Util.ArratList不能强转为java.lang.CharSequence。在反复确认我们的配置文件写的没问题后。我们仔细阅读了一下控制台打印的栈追踪信息。
2)问题定位
通过最后打印的栈追踪信息,我们可以知道出错的位置在DorisOutPutFormat.java文件的第210行,于是我们需要去idea里面打开源码看一下这里的代码是怎么写的。
5.2.3 分析问题
定位到210行后,我们看到下面的问题。
它要将一个batch(它是一个ArrayList集合)强转为CharSequence(字符序列)。这显然是错误的。
要想解决这个问题,我们要了解这段代码的意图。
这需要一定的背景知识,SeaTunnel的dorisSink其实是依托于doris的stream load这种导入方式来实现的。而stream load其实是通过http请求的形式,向doris导入数据。而且doris提倡提交数据的时候一定要成批地向doris导入数据。如此一来,我们知道bacth就是用来积攒数据的一个集合,而向远端通过http发送数据必然要经过一个序列化的过程。结合上下文来看,我们可以判断这段代码的目的,就是要将batch里的所有数据,按照某个规则转为字符串,为http请求做准备。分析过程如图所示。
5.2.4 确定问题的解决方案
我们需要看一下String提供的这个join静态方法,对参数的要求。
我们发现,join方法的第二个参数是一个CharSequence类型的可变长参数,这意味着我们可以向里面传递一个CharSequence类型的数组。那么代码可以修改成下面这个样子。
5.2.5 方案验证
1)重新打包
接着,我们可以重新编译这个包,把重新编译的包放到我们的集群上,再跑一次任务看看能不能通过。在这个过程中,因为跨平台性的问题(windows和linux的路径不通用,其实也是个bug),有一些单元测试我们无法通过,因此我们取个巧,用下面的方式进行编译打包,跳过单元测试和代码的格式审查。
mvn clean package -D maven.test.skip=true -D checkstyle.skip=true
2)使用新的包
接着,我们使用重新编译过的SeaTunnel执行我们之前向Doris导入数据的命令。
bin/start-seatunnel-flink.sh --config config/example04.conf
3)到我们的Doris上查看数据是否成功导入
这次我们的数据成功导进了doris。而且我们的程序并没有因为类型转换错误而崩溃。
4)小结
经过上面的这些步骤,我们确信问题是出在源码的问题上。接下来我们要开始向社区汇报这个bug,并向社区提供我们的解决方案。
标签:插件,为例,SeaTunnel,bug,开源,贡献,我们,doris From: https://www.cnblogs.com/kkk247843405/p/16967820.html