首页 > 其他分享 >如何参与开源贡献—SeaTunnel为例 文1

如何参与开源贡献—SeaTunnel为例 文1

时间:2022-12-09 00:33:46浏览次数:38  
标签:插件 为例 SeaTunnel bug 开源 贡献 我们 doris

如何参与开源贡献—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

相关文章

  • SeaTunnel入门教程
    SeaTunnel教程第1章Seatunnel概述1.1SeaTunnel是什么SeaTunnel是一个简单易用的数据集成框架,在企业中,由于开发时间或开发部门不通用,往往有多个异构的、运行在不同的软硬......
  • 秒级查询之开源分布式SQL查询引擎Presto实操-上
    @目录概述定义概念架构优缺点连接器部署集群安装常用配置说明资源管理安装模式安装命令行界面基于TableauWeb连接器使用优化数据存储查询SQL优化无缝替换Hive表建表格式......
  • NGINX 开源社区捉虫征集令
    原文作者:NGINX中文社区官方团队原文链接:​​NGINX开源社区捉虫征集令​​转载来源:NGINX官方网站一元复始,万象更新!NGINX社区版本更新啦!内容上,除了严肃的技术内容,我们开设......
  • 专访 | 刘乔升:开源是人类智力劳动最好的组织形式
    OpenMLDB:可以请你先自我介绍一下吗?刘乔升:我叫刘乔升,来自复旦大学,就读于软件工程专业,是2022开源之夏OpenMLDBGoSDK项目的贡献者。在参加本届开源之夏活动前,我就有参......
  • 基于Qt的桌面客户端组件化框架DT 开源啦
    这个是本人在工作中基于QT开发的组件化桌面开发框架,目前打算开源出来提供给大家,节省大家的开发时间和效率,希望对大家的开发有所帮助,也欢迎提出意见和改进建议1.为什么开源D......
  • 活动预告 | 2022 中国开源开发者(北京)峰会
    12月8日14:30-14:55,OpenMLDBPMC、第四范式系统架构师卢冕,将在2022中国开源开发者(北京)峰会中为大家带来议题为《开源机器学习数据库OpenMLDB:线上线下一致的生产级特征......
  • 【开源项目】震惊JDBC查询比MyBatis查询慢
    震惊JDBC查询比MyBatis查询快?文章编写起始原因,在编写项目的时候碰到一个深坑,JDBC获取5000条数据,居然耗时261s,MyBatis同样的操作,耗时12s左右,震惊。看到这里下巴都快掉下来......
  • 熔断与服务降级开源库Sentinel
    Sentinel介绍分布式系统中一个微服务需要依赖于很多的其他的服务,那么服务就会不可避免的失败。例如A服务依赖于B、C、D等很多的服务,当B服务不可用的时候,会一直阻塞或者异常......
  • 【开源库推荐】#4 Poi-办公文档处理库
    原文:【开源库推荐】#4Poi-办公文档处理库-Stars-One的杂货小窝github仓库apache/poiApachePOI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microso......
  • 收藏两个不错的开源国内测试框架
    1)项目简介:这是一个WebUI自动化测试框架,由webdriver中文社区创办人土豆(本人技术笔名)所创建,该web自动化测试框架是用java语言编写的,基于seleniumwebdriver的开源自动化......