首页 > 其他分享 >成为Apache SeaTunnel贡献者的N种方式

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

时间:2024-07-30 14:17:02浏览次数:13  
标签:贡献者 SeaTunnel 创建 代码 bug Apache issue 我们

file

如何参与开源贡献

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

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。在反复确认我们的配置文件写的没问题后,我们仔细阅读了一下控制台打印的栈追踪信息。

file

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

file

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

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

file

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

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

file

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

file

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

file

5)方案验证

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

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

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

file

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

如何创建 issue

什么是 issue

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

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

创建 issue

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

file

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

file

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

file

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

file

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

file

如何创建 pull request

pull request 的意思是拉取请求, 也就是我这有代码写好了,请你把我的代码拉过去吧。 所以, 发起拉取请求之前应该要先有自己的代码。这样一来, 创建 pull request 并不是一上 来就创建, 而是要先搞好自己的代码仓库。

pull request 的简称是 pr。

5.4.1 fork 项目到自己的仓库中。

对于第一次为 SeaTunnel 做贡献的同学来说,应该先 fork (叉子) 官方的仓库。

file

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

file

git clone 自己 fork 的仓库

file

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

如何修改代码

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

file

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

file

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

file

如何创建 PR

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

file

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

file

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

file

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

file

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

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

成功成为源码贡献者

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

file

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

file

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

寻找贡献机会

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

file

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

标签:贡献者,SeaTunnel,创建,代码,bug,Apache,issue,我们
From: https://www.cnblogs.com/seatunnel/p/18332267

相关文章

  • Java中的数据流处理框架:Apache Flink
    Java中的数据流处理框架:ApacheFlink大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨一下Java中的数据流处理框架——ApacheFlink。Flink是一款用于处理数据流和批处理的分布式处理框架。它具有高吞吐量、低延迟和容错的特性,广泛应用于实时......
  • RestTemplate和 apache HttpClient 使用方式
    一、RestTemplate RestTemplate是简化了组装请求对象该类存在于依赖spring-boot-starter-web中,RestTemplate支持get,post现1、RestTemplate不是可直接注入Bean,需要实例化生成BeanSpringBoot的自动配置机制非常强大,但并不是所有的类都被默认自动配置为bean。对于R......
  • Windows下使用Apache和mod_wsgi部署django项目
    一、安装Python确定好所需要的python版本。二、安装Apacheapache下载地址:http://httpd.apache.org/docs/current/platform/windows.html#down下载完成后做如下操作将apache解压后直接复制到你想安装的路径下1、更改httpd.conf文件,找到如下代码并更改路径DefineSRVROOT"E:......
  • 【Apache Doris】3.0存算分离|标准部署篇(一)
    【ApacheDoris】3.0存算分离|标准部署篇(一)一、前提概要二、环境信息三、前置准备四、FoundationDB安装五、OpenJDK17安装六、MetaService安装七、集群安装八、快速体验接上数据架构新篇章:存算一体与存算分离的协同演进。本文主要分享ApacheDoris3.0存算分离架......
  • Apache2服务介绍
    apache2安装使用配置web访问配置虚拟主机配置代理正向代理反向代理官网互联网上排名第一的HTTP服务器,ApacheHTTP服务器项目致力于开发和维护适用于现代操作系统(包括UNIX和Windows)的开源HTTP服务器。该项目的目标是提供安全、高效且可扩展的服务器,该服务......
  • Linux中,Apache配置与应用
    ApacheHTTPServer之所以受到众多企业的青睐,得益于其代码开源、跨平台、功能模块化、可灵活定制等诸多优点,不仅性能稳定,在安全性方面的表现也十分出色。Apache连接保持HTTP是属于应用层的面向对象协议,基于TCP协议之上的可靠传输。每次在进行HTTP连接之前,需要先进行TCP连......
  • 使用Apache Camel进行Java企业集成
    使用ApacheCamel进行Java企业集成大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!本文将介绍如何使用ApacheCamel进行Java企业集成,帮助您在企业应用中实现高效的数据交换和流程自动化。一、ApacheCamel简介ApacheCamel是一个强大的开源集成框架,它提......
  • 无法解析插件 org.apache.maven.plugins:maven-war-plugin:3.2.3(已解决)
    文章目录1、问题出现的背景2、解决方法1、问题出现的背景最开始我想把springboot项目转为javaweb项目,然后我点击下面这个插件就转为javaweb项目了,但是我后悔了,想要还原成springboot项目,点开项目结构关于web的都移除了,还是不行,控制台报下面的错误无法解析插件org.......
  • Apache Doris + Paimon 快速搭建指南|Lakehouse 使用手册(二)
    湖仓一体(DataLakehouse)融合了数据仓库的高性能、实时性以及数据湖的低成本、灵活性等优势,帮助用户更加便捷地满足各种数据处理分析的需求。在过去多个版本中,ApacheDoris持续加深与数据湖的融合,已演进出一套成熟的湖仓一体解决方案。为便于用户快速入门,我们将通过系列文......
  • 整合Apache Hudi+Mysql+FlinkCDC2.1+CDH6.3.0
    一、环境准备1.环境准备:flink1.13.1+hudi0.10+hive2.1.1+cdh6.3.0+mysql5.7+flinkcdc2.1+flinkweb平台二.编译hudi(这个编译是以前的一个测试版本,编译大同小异)1.使用git命令下载hudi0.10的代码steven@wangyuxiangdeMacBook-Pro~gitclonehttps://github.com/ap......