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

news/2024/9/23 3:16:55/文章来源:https://www.cnblogs.com/seatunnel/p/18332267

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/774053.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

构建个性化财务数据看板,免费可视化工具来助力

财务月度数据,作为企业经营的晴雨表,其重要性不言而喻。然而,面对海量、复杂的数据,如何快速提炼关键信息,形成直观易懂的洞察报告,成为了众多企业面临的挑战。随着技术的不断进步,可视化工具正逐步成为财务数据分析领域的得力助手,帮助企业轻松构建财务月度数据看板,…

企业级Scrum敏捷开发培训:推动团队高效运作

“企业级Scrum敏捷开发培训:推动团队高效运作”​ 在当今快速变化的商业环境中,企业必须不断创新和快速响应市场需求,以保持竞争优势。Scrum敏捷开发方法作为一种高效的项目管理框架,已被全球众多企业采用,用于提高团队协作和交付速度。为了帮助企业更好地理解和应用Scrum…

关于VMware workstation添加本地物理磁盘时候提示“未能为设备XX加载分区,权限不足,无法访问文件”的解决办法

前言:玩虚拟机这么久了,原先一直是直接初始化虚拟机的时候按照流程新建虚拟机硬盘,但是正常情况下虚拟机硬盘与物理机硬盘是隔离开的,无法直接相互访问 正常情况下 是安装vm tools来进行相互间文件传输,或者将物理磁盘上的文件拷贝到U盘,当插上U盘的时候选择连接到对应的…

记一个kvm虚拟器迁移后无法启动故障

参考 https://www.cnblogs.com/joshua317/p/18061002故障现象 kvm虚拟机从一台主机迁移至另外一台主机后启动失败 报错信息如下# Type "journalctl" to view system logs.使用命令查看错误信息 # Failed to mount /sysroot原因分析 CentOS系统启动时出现Failed to mo…

Win11系统C盘拒绝访问或打不开怎么办???

在使用Win11系统的时候,有用户可能会遇到C盘拒绝访问或者无法打开的情况,因此可能会感到困惑和无助。而这通常是由于权限设置问题或者其他系统错误导致的。不过,不必过于担心,因为这种情况通常可以通过一些简单的步骤来解决,一起来看看吧。C盘拒绝访问或打不开的解决方法方…

P9746 「KDOI-06-S」合并序列

mx练习赛搬的,虽然数据不咋样,但是一步步的优化思路确实值得一记。 P9746 合并序列 题目大意: 给你 \(n(1\le n \le 500)\) 个数 \(a_1,a_2,\ldots a_n\)(\(a_i < 512\))。每次可以选一个3元组 \((i,j,k)\),满足 \(i<j<k\),并且 \(a_i\oplus a_j\oplus a_k=0…

Day 23 - 模拟赛

百万富翁的第二次实验 题目描述 马克吐温有一本非常著名的小说《百万英镑》,这本小说中主角最后归还了百万英镑给两位富翁。但结果就是两位富翁依然有无穷的问题需要进行社会实验,于是,他们打算进行第二次社会实验。那就是不同财富值的人在一场舞会上会发生什么事情。为了满…

LeetCode 756. Pyramid Transition Matrix

原题链接在这里:https://leetcode.com/problems/pyramid-transition-matrix/description/ 题目: You are stacking blocks to form a pyramid. Each block has a color, which is represented by a single letter. Each row of blocks contains one less block than the row …

两个燃点,引爆在线教育平台数智化

人人都能消费数据,事事都能数据驱动,正在成为火花思维数智化升级下的日常,这也与火山引擎推出的企业数智化升级新模式不谋而合。关注 字节跳动数据平台公众号,回复“火花思维”,获取高清方案设计及产品资料 2017年,专注于少儿逻辑思维的在线教育品牌火花思维正式成立,依…

一个简单的遍历需求

今天开发一个前端遍历展示的接口,被前端怼了看图需求很简单多行展示 每行多个,可显示更多,每行可左右滑动为了图省事简单组装一下直接返回回去了,方便是真的方便,前端生气也是真的生气,可以简单对这个横向、纵向接口压缩一下横向空间上,可以取分页,前端自己传,无论是懒…

分享一个MySQL数据库表结构导出word文档最方便的方法

原文链接:https://blog.csdn.net/typ1805/article/details/83658708 1、使用的是MySQL-Front工具,这个工具使用非常方便,尤其是导出数据的时候,几百万的数据一两分钟就导完了,推荐使用。 MySQL-Front下载(只有3.93M):https://mysql-front.en.softonic.com/ 注:新版本和…

排球比赛计分程序模拟冲刺(sprint)

模拟冲刺计划(spring) 选择小的用户故事模拟冲刺: 裁判张三、业余排球比赛组织者李四、排球运动员王五 一、任务拆分与开发时间:裁判张三:任务 1:开发操作指南和演示视频- 时间:第 1 天 任务 2:实现提前设置比赛基本信息功能- 时间:第 2 天 任务 3:设计简便计分操作界面…