Tapdata 技术博客
Tapdata 技术博客

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

2023-01-17 19:41 Tapdata

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


2022年4月,Tapdata 宣布开源 PDK(Plugin Development Kit),将自身的数据接口技术抽象化,赋能开发者。同时联合 Apache Doris、OceanBase、PolarDB、SequoiaDB 等生态伙伴,开启插件共建计划。

Tapdata  宣布开源 PDK

2022年7月,依托 Tapdata 核心功能的 Tapdata Community 正式与大家见面,越来越多的伙伴加入到我们的开源社区中来。


Tapdata Community 工作原理


2022 下半年,为了吸引更多优秀的开发者参与共建,同时活跃社区,回馈项目贡献者,Tapdata 数据源 Connector 挑战赛启动,更多新鲜力量随之涌入。


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 用例来进行单元测试。


Tapdata 开源挑战赛首位外部开发者测试通过


我们的首位外部开发者在数据源 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 的整体开源框架、数据源插件的定位及工作原理、整个开发流程包含的工作分步和配置需求、开发重难点等背景信息,并同步推荐阅读的文档列表。


考虑到前面提到的数据源特性,如果所选择的数据源比较特殊,就更加需要我们的开发者积极地与项目官方取得联系,合作解决可能遇到的开发挑战。随着数据源类型的日益多样,甚至会出现一些需要 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,顺利情况只需要数小时就可以完成


【相关阅读】


推荐阅读