由于项目需要,需要把多个Mysql数据库的数据同步到Doris数据库,然后利用Doris强调的计算和查询能力,来满足业务需求。有关Doris可以查看它的官方文档来了解它。
从《第十届GIAC全球互联网架构大会》了解到在etl工具领域出了一个新的由国人开发的工具——Seatunnel,看PPT介绍是比阿里的Datax还好用的数据同步工具,以下图片来自大会PPT《白鲸开源 代立冬-基于 Apache SeaTunnel 实现超高性能数据同步.pdf》
从这个PPT文档上面来看,支持的数据源比其他三款多,单机性能比最快的DataX还快20%-50%,以及社区很活跃等等,那肯定果断使用Apache SeaTunnel来做数据同步是最好的选择了。
于是我开始进入SeaTunnel的官网,开始学习,粗略看了下,好像确实强大和简单,于是开始着手部署到测试环境去验证,下载最新版本(当时是2.3.2),在测试Mysql同步到Doris时,马上就遇到了一个坑:
org.apache.seatunnel.shade.com.typesafe.config.Config这个类找不到
在社区群请教大佬,大佬说让我用dev分支试试,于是我下载dev最新的代码,本地打包去部署,这里又有坑,因为Seatunnel里面有依赖一些在maven官方库没有的包,所以有些包需要自己下载,但没有找到相关文档说明,咨询大佬才知道,给了我这个文章参考,成为 Seatunnel 源码贡献者保姆级教程
按照这个文档操作之后,顺利打包,然后去部署,可以正常同步数据了。很开心~
在测试环境测试1000万数据用了999s,平均10673条/s,速度还是相当不错的。
但是立马又发现问题,有时候能正常跑完,有时候又会报错,提示:
1.ErrorCode:[Doris-01], ErrorDescription:[stream load error]
2.ErrorCode:[Doris-01], ErrorDescription:[stream load error] - Load status is Label Already Exists and load job finished, change you label prefix or restore from latest savepoint!
3.Please increase checkpoint timeout in the seatunnel.yaml
这里面1,2是doris那边Stream load出问题了,应该是seatunnel生成的lable prefix和之前提交的又重复,倒是提交不成功,属于是seatunnel生成策略问题,3这个就很迷,对seatunnel提交数据到doris的时机和控制不是很了解,官网也没有一个很清楚的说明,如果表数据量很大,很容易checkpoint一直卡着,然后超时,配置了split分片后也会,不知道如何解决好。并且在生产(数据量更大)测试的时候,有时候发现读不到数据,都是0
有时候任务信息显示的写入数量,在doris去查询对不上,相差很远。
由于遇到了很多奇奇怪怪的问题,而又不知道应该怎么查找问题,怎么解决问题,搞的就很烦了,可能工具本身是很好的工具,只是我使用的问题,很有可能是各种参数配置的问题,但是这里又没有一个最佳实践案例给参考,在官网上参数说明也很简单,对应技术大佬或者从事etl工具开发者来说可能看到这些说明就基本明白怎么样去调优,但是对于我这个小白来说,完全不知道要怎么办,于是打算放弃使用Seatunnel了,或许它很好,或许它未来会更好,等到它更加成熟我再来使用它吧,暂时再见了~
由于无法使用好Seatunnel,于是打算使用datax来同步,因为Doris用的也是Mysql的连接协议,我测试一下在datax中使用同步Mysql一样的方式来同步数据到Doris,慢的可怕,只有几百每秒的速度,但确实大数据量也很稳定的同步,但这个速度显然不满足需求。
在Doris官网文档里面发现有相关的生态扩展,见DataX Doriswriter - Apache Doris,下载最新的DataX,发现这个插件已经集成到DataX里面的,于是我使用最新的DataX来测试一下数据同步,直接惊讶到我了,速度达到了惊人的11MB/s,平均21761条/s
这个速度比Seatunnel的速度还要快一杯了,并且很稳定,没有奇奇怪怪的问题,参数设置很明确多少条数据、多大的数据进行写入。
于是乎果断使用上了datax来进行数据同步了。
最新的技术不一定最好用,刚出来还没有经历过大面积的应用,总会有很多奇奇怪怪的Bug,但是新的工具新的技术总是推动着技术的发展和革新,希望Seatunnel未来能做到又快又好用。
在技术实现选择上面还是不能完全听别人的介绍或者百度搜索的资料,还是需要自己实际的去对比一下,有些时候别人的说的不一定对,或者别人的一下测试数据或者理论数据是在不同版本(可能不是发行版)不同环境中得出来的,所以还是需要自己实际进行测试对比,来决定使用什么样的实现方案。