致 Tapdata 开源贡献者:聊聊 2022 年的进展和新一年的共建计划

news2024/11/14 2:25:05

岁末年初,在开源领域刚埋下一颗生机勃勃的种子的 Tapdata,想和正在关注我们的开发者,聊聊这一年的进展和新一年的共建计划。

2022年4月,Tapdata 宣布开源 PDK(Plugin Development Kit),将自身的数据接口技术抽象化,赋能开发者。同时联合 Apache Doris、OceanBase、PolarDB、SequoiaDB 等生态伙伴,开启插件共建计划。
在这里插入图片描述
2022年7月,依托 Tapdata 核心功能的 Tapdata Community 正式与大家见面,越来越多的伙伴加入到我们的开源社区中来。
在这里插入图片描述
2022 下半年,为了吸引更多优秀的开发者参与共建,同时活跃社区,回馈项目贡献者,Tapdata 数据源 Connector 挑战赛启动,更多新鲜力量随之涌入。
在这里插入图片描述在内、外部开发者的合力之下,2022年 Tapdata 新增数据源近20个,其中包括数仓目标 BigQuery、Doris、Ckickhouse、阿里云存储、OSS HDFS、SelectDB 等,实现了60+数据源的接入能力。与此同时,PDK 架构可扩展能力进一步增强,可以支持:4小时快速对接 SaaS API 系统;16小时快速对接数据库系统。

为了让大家充分了解项目进展,帮助新加入的开发者有效规避一些初次开发过程中的常见问题,我们特别邀请到挑战赛首位成功领取参赛奖金的外部开发者(GitHub ID: IssaacWang),以及官方技术支持 Jarad,围绕以下几点展开分享:

  • 从开发者角度来看,Tapdata 项目新增了哪些变化?
  • 在开发过程中的常见问题有哪些?
  • 对于 Tapdata “开发新手”,有什么建议和经验分享?

一、Tapdata 项目进展:对开发者更加友好

为了更加方便开发者上手,我们在整体的友好程度上,进行了如下优化:

① 支持在线 Debug
在新数据源开发的过程中,无需关注引擎、TM(Tapdata Manager)等,只需要专注于数据源项目模块即可。开发完成后,还需要通过在线联调测试同步效果,但在此前,由于前端尚未开源,外部开发者实现起来就会没那么方便。但现在无需前端,只需要将引擎拉到开发工具中,在完成数据源插件开发后,就能通过环境变量配置,轻松关联 Tapdata 云版,弥补前端页面缺失。开发者得以在云版管理端启动数据同步任务,而实际响应则是在本地 IDEA 中生效,从而支持开发者在自身开发工具的 IDEA 中打断点,达到在线 debug 的效果。

② TDD 单元测试优化
我们在 TDD 测试框架上新增了不少测试用例,开发者在完成一个数据源的开发工作之后,只要有自己的开发工具,以及本地的数据源部署,就可以通过 TDD 用例来进行单元测试。

在这里插入图片描述
我们的首位外部开发者在数据源 TDengine 的测试环节,就跑完了包括在线联调 P0 测试,以及 TDD 段元测试的全流程。

除此之外,我们还在代码自动化生成方面做了一些努力,期待2023年能和开发者一起解锁更多新进展。

二、开发过程中的常见问题与避「坑」指南

对于刚接触到一个新鲜项目的开发者而言,难免会遇到一些棘手的状况,比如:

  • 感觉是个有趣的项目,临时起意尝试开发,但并不知道从何入手;
  • 熟悉的数据源都已经支持了,随手选了一个并不了解的数据源,开发到一半就后继无力了;
  • 选择的数据源比较“偏门”,开发适配起来没有很多先验经验供参考;
  • 数据类型转换、开发自测等开发过程中遇上的诸多细节问题
  • ……

大体可总结为以下三类问题:

一心埋头开发型:并没能真正加入到社区中来,上手前一方面没有充分掌握所选数据源,一方面忽略了项目官方提供的文档和资料;
开发工具不完善:对选择的开发工具不熟悉,比如因缺少必要插件导致的使用问题等,会直接影响开发积极性;
开发环境不友好:经验证,目前 Tapdata 项目开发对 Mac 或 Linux 系统更友好,稳定性也普遍高于 Windows 系统。

对此,我们也为新人开发者总结出以下三条避坑指南:

开发前的充分调研

无论选择了何种数据源,开发者在正式上手之前,无论是通过阅读该数据源的官方文档还是通过其他渠道,都需要对其进行全面的了解,事无巨细,大到如何部署,小到字段类型等。

其中,数据源部署算是一个不小的难点,对我们的开发工作有着直接影响。因为很多开发者可能并不具备相关运维部署经验,特别是对于一些没有接触过的数据源,再加上部署本身也有很多不同模式上的差异,更容易耗时踩坑。因此我们建议开发者在充分调研熟悉后,不要试图一次性涵盖全部情况,优先选择一个相对简单的模式来起步,之后再思考如何兼容其他不同的模式。如果实在无法兼容,在考虑用其他方法解决。

此外,数据源的字段类型也是值得开发者们特别关注的要点之一。每个数据源都有很多字段类型,而数据本身也有很多数据类型,在 Tapdata 数据源开发过程中,涉及一个用来写字段类型的 JSON 文件,这个文件非常重要,是 Tapdata 框架实现模型推演的基础。直接关系到数据同步任务的结果准确性。

因此,前期的调研工作需要开发者们能够以充分的耐心与积极的态度来应对。这也是我们开发工作得以成行的前提。

代入 Tapdata 来思考

完成数据调研之后,开发者们还需要将该数据源代入 Tapdata 来思考。换言之,就是要将数据源视作需要适配到 Tapdata 框架的一部分来预演下一步的开发规划。例如待开发的数据源中不存在数据库、数据表的概念,但存在类似的对应组,就可以将它们视作库和表来进行对应操作。在适配过程中,我们要随时保持这样的对应思维,考虑数据源中和框架上所需内容的对应关系。

事实上,每个数据源或多或少都存在一些各自的特性,甚至于有些特性对 Tapdata 框架并不友好,比如部分分析型数据源,对于更新、删除的支持度较低,但批量插入的性能又很高,像是 Doris、SelectDB 等,就属于这一类数据源,如果依旧用传统的 JDBC 来做数据插入,性能会有不小的损耗。这就需要我们针对这些差异来进行能力适配,充分利用其优势面完成性能优化。再比如 Tapdata 产品亮点之一的 CDC 数据挖掘,也是数据源插件开发过程中的一大难点。在这一点上,有些数据源自身就提供了 API 的支持,仅需做一些简单配置就能读取到其间的数据变化,但有些数据源实现起来就会很麻烦,往往需要诉诸其他插件或第三方工具。

这些问题都需要我们提前完成“Tapdata 代入式”思考。

积极向官方寻求支持
开源项目的成长,从来不是一人行路。当正式着手开发,或是遇到可能会阻滞开发进程的大小问题时,开发者们可以随时利用社区的力量,这里不仅有志同道合的开发者伙伴,还有来自 Tapdata 项目官方的技术支持。

对于外部开发者而言,哪怕拥有丰富的开发经验,在刚接触到一个全新项目的时候,也难免会有些茫然。因此,我们的官方技术支持希望在独立调研之前,有机会为开发者详细地举例介绍 Tapdata 的整体开源框架、数据源插件的定位及工作原理、整个开发流程包含的工作分步和配置需求、开发重难点等背景信息,并同步推荐阅读的文档列表。

考虑到前面提到的数据源特性,如果所选择的数据源比较特殊,就更加需要我们的开发者积极地与项目官方取得联系,合作解决可能遇到的开发挑战。随着数据源类型的日益多样,甚至会出现一些需要 Tapdata 开源框架来反向兼容的全新数据源,它们自有一套开发模式,需要 Tapdata 额外为其做出框架优化。实际上,我们的框架在过去这 60+ 数据源陆续新增的过程中,已经完成了多次优化迭代,这种调整未来只会更多。

Tapdata 数据源挑战赛首位成功的外部开发者 IssaacWang,便是如此在他的开发过程中与 Tapdata 官方保持高频沟通与合作的。如前所述,增量 CDC 是 Tapdata 数据源插件开发中的一大难点,而 IssaacWang 所开发的 TDengine 数据源独特性,刚好点在增量问题上——需要在引擎侧安装一个与 TDengine 连接的 Client 端。类似的很多问题都是这样在双方的沟通中逐个击破的。

三、开发者说

最后,我们想要用 IssaacWang 谈及本次开发的感受来作结:

最初想要参与到 Tapdata 项目贡献中来,一方面是朋友邀请参加挑战赛,刚好想要借此机会提升下开发能力,一方面还有机会顺带赢取奖励,何乐不为?只可惜参与进来的时候,比较熟悉的数据源都已经得到了支持,因此在开发过程中需要多一些磨合,如果可以的话,还是建议之后的开发者选择相对熟悉一些的数据源,无论是文档还是各个版本,这样上手也会轻松得多。幸而我一直和项目官方保持密切的沟通,整个过程虽然有挑战,但还是顺利通关。

其实早前在工作中,恰巧也遇到过类似的数据同步需求,当时公司的研发团队也尝试自主搭建了一个解决方案,但由于配置繁杂、学习成本较高,最终还是选择了惯用的传统解决方案。那个时候其实就非常希望能有这样一个经过市场验证、方便快速上手的开源工具可以供团队选择,相信这样可以大大节约资金、人力和时间成本。

作为比较早期参与进来的贡献者,需要摸索的地方自然会更多,但以挑战赛的形式共同完善一个项目无疑是一个相当有意思的过程。

过往可忆,未来可期。我们的项目共建计划还在继续,大家仍然有机会通过挑战赛的形式参与到 Tapdata 项目贡献中来。2023,期待更多志同道合伙伴的加入,让我们一同将产品打磨得更强 ❤

【关于 Tapdata PDK】
作为 Tapdata 开发者共建计划的底座,PDK 是一个开源插件开发框架,通过 Source Plugin 接口或者 Target Plugin 接口,可以快速实现新数据库作为 Tapdata 的源或目标的适配兼容。 PDK 开发者遵照开发规范,进行包括数据库、SaaS 产品、自定义数据源在内的新数据源对接开发工作;通过 PDK 文档、 Plugin 模板以及内置的 TDD 测试框架, 一个 Target Plugin,顺利情况只需要数小时就可以完成。

【关联阅读】

  • Tapdata PDK 生态共建计划启动!Doris、OceanBase、PolarDB、SequoiaDB等十余家厂商首批加入
  • Tapdata 的 2.0 版 ,开源的 Live Data Platform 现已发布
  • Tapdata 开源项目基础教程:功能特性及实操演示
  • 开源中国专访 TJ:开源许可证,欢迎来到云时代
  • 干货精华 | Tapdata 开源教程之异构数据库模型推演
  • 阿里云对话 Tapdata:「开发者优先」正在影响商业化软件的开源选择

原文链接:https://tapdata.net/a-letter-to-tapdata-open-source-contributors.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端js实现文件多次添加累加上传和选择删除(django+js)- 添加累加文件上传 (一)

前言 原本的多文件上传功能在选择文件时,只能通过同一范围的鼠标框选或者ctrl/shift多选取选择文件,这样选择文件很不灵活,而且在确定之后如果漏选了文件,再次点击上传按钮时会清空表单里的文件信息,只能重复之前的操…

数据库mysql调优

问题描述: mysql dba在mysql服务端启用了连接在空闲一定时间 (10分钟) 后,就自动关闭连接(连接失效)的功能,导致java端连接池在空闲一段时间后,连接被自动关闭(自动失效)。为了避免这种情况出现,可以在dbcp上配置空闲的时候检测连…

PCI、PCI-X、PCI-E、PCI-E Card、Mini PCI-E、M.2、Add-in Card 它们有啥区别?这些概念你搞清楚了吗?

搞硬件或通信的“攻城狮”们,免不了要和各种通信协议及接口打交道。比如,我们经常接触PCI、PCI-X、PCI-E、PCI-E Card、Mini PCI-E、M.2(NGFF)、Add-in Card这些概念,作为“攻城狮”队伍中的一员,你搞清楚它们之间的关系了吗&…

Python爬虫教你爬取csdn作者排行榜

(一)两种爬取方式介绍 1.自动化测试工具 安装好驱动(以前的selenium文章有教程),然后进行元素定位,最后数据提取,用xls表格进行持久化存储 2.requests库 利用基本方法发起请求,获得json数据进行持久化存储 本篇文章先讲解第二种&#xf…

洛谷——树与图dp与状压dp

文章目录[NOIP1996 提高组] 挖地雷题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示思路代码最大食物链计数题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示思路代码[ZJOI2006]三色二叉树题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #…

浅说 INSERT/块参照/BlockReference

在AutoCAD中使用INSERT命令插入一个块时,生成块参照实体,也叫INSERT实体,在ObjectARX中,对应类AcDbBlockReference。反正就这么一个东西,名儿还挺多,我家乡有句话叫“二嫚她婆婆俩名”,莫非这是…

数据结构(5) treap

活动 - AcWing 参考—《算法竞赛进阶指南》-lyd 目录 一、概述 二、具体操作详解 1.常见操作 2.结构定义 3.操作基础函数 (1)pushup (2) 获得一个新节点 (3)左旋右旋 (4)建…

centos上面用docker 安装nacos 1.4.1

方式一: 下载nacos本地文件 1. 去官网下载GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.2.上传到Linux服务器中cd /usr/uploadtar -zxvf nacos-serv…

二、QML工程之初始工程代码分析

接着上一讲&#xff0c;当建立完工程之后&#xff0c;IDE 会呈现如下的界面下面的代码是main.cpp&#xff0c;工程起始运行的代码段&#xff0c;具体的函数说明都在代码段里面进行了标注。#include <QGuiApplication> //主要是ui进程运行头函数&#xff0c;包含事件循环&…

【云原生】k8s图形化管理工具之rancher

内容预知 前言 1. Rancher的相关知识 1.1 Rancher的简介 1.2 Rancher与k8s的关系及区别 1.3 Rancher具有的优势 2. Rancher的安装部署 2.1 实验环境与部署图分配 2.2 具体的部署操作 &#xff08;1&#xff09;在 rancher 节点下载 rancher 镜像 &#xff08;2&#xff…

【Spring(七)】详细了解Spring的核心容器

文章目录前言容器总结前言 前面我们完成bean以及依赖注入的相关学习&#xff0c;现在我们进入到核心容器的最后一块内容了&#xff0c;也就是与容器相关操作的学习&#x1f388;&#x1f388;。 容器 前边我们获取容器是这样获取的&#x1f447;&#x1f447;。 这只是获取容器…

Vue CLI脚手架

1、Vue的开发模式 目前我们使用vue的过程都是在html文件中&#xff0c;通过template编写自己的模板、脚本逻辑、样式等。 但是随着项目越来越复杂&#xff0c;我们会采用组件化的方式来进行开发&#xff1a; 这就意味着每个组件都会有自己的模板、脚本逻辑、样式等&#xff…

凌恩生物报告升级,科研美图助力群落互作机制研究

2022年&#xff0c;在多位技术支持与生信工程师的通力合作下凌恩生物报告升级重磅升级&#xff01;扩增子分析流程项目从60到120&#xff0c;可谓是加量不加价的超值更新了&#xff01;结题报告的结果图片可直接用于文章发表&#xff0c;快一起来看看&#xff01;小小的举个例子…

pytorch【Conv2d参数介绍】

def __init__(self,in_channels: int,out_channels: int,kernel_size: _size_2_t,stride: _size_2_t 1,padding: _size_2_t 0,dilation: _size_2_t 1,groups: int 1,bias: bool True,padding_mode: str zeros # TODO: refine this type):in_channels&#xff1a;网络输入…

《Linux性能优化实战》学习笔记 Day03

04 | 零拷贝&#xff1a;如何高效地传输文件&#xff1f; 原文摘抄 文件拷贝 上下文切换的成本并不小&#xff0c;虽然一次切换仅消耗几十纳秒到几微秒&#xff0c;但高并发服务会放大这类时间的消耗。 每周期中的 4 次内存拷贝&#xff0c;其中与物理设备相关的 2 次拷贝是…

再学C语言37:函数、数组和指针

编写一个对数组进行操作的函数&#xff0c;并进行调用 一般形式举例&#xff1a; int sum(int * arr, int n); // 函数原型// 第一个参数把数组地址和类型信息传递给函数// 第二个参数把数组中元素的个数传递给函数int main(void) {...int total;total sum(array_t, 10);...…

分分钟你也能写一个自己需要的 Chrome 扩展程序

废话 对于chrome浏览器想必大家大不陌生了&#xff0c;里面的扩展程序&#xff08;本文后面称插件&#xff09;&#xff0c;多多少少也都用过吧&#xff0c;毕竟可以辅助自己的日常工作&#xff0c;娱乐等等&#xff0c;添加完之后呢&#xff0c;就会多出一些操作按钮&#xf…

年度总结-你觉得什么叫生活?

陈老老老板&#x1f9b8;&#x1f468;‍&#x1f4bb;本文专栏&#xff1a;生活&#xff08;主要讲一下自己生活相关的内容&#xff09;&#x1f468;‍&#x1f4bb;本文简述&#xff1a;生活就像海洋,只有意志坚强的人,才能到达彼岸。&#x1f468;‍&#x1f4bb;上一篇文章…

Linux常用命令——tr命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) tr 将字符进行替换压缩和删除 补充说明 tr命令可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符&#xff0c;经常用来编写优美的单行命令&#xff0c;作用很强大。 语法 tr(选…

云逗猫——直播弹幕控制机械臂逗猫棒

这个东西思路是很简单的。简单来说在直播画面用文字跟观看者约定一些弹幕指令&#xff0c;然后用爬虫爬取直播弹幕&#xff0c;当爬到弹幕是约定的指令时&#xff0c;通过串口给舵机控制板发送信号&#xff0c;控制板控制舵机转动&#xff0c;机械臂就会做相应的动作。 猫 两…