2022年08月和同事接手以前的一套老系统,系统需求不高,大部分功能都是要求使用爬虫或etl工具从第三方采集数据。以后有空再整理爬虫,这里主要谈谈我对数据采集的个人看法。
出于工作性质原因,我接触过不少的数据采集应用,有使用自研工具的、也有使用类似dataX等开源工具,虽然略有侧重,但核心仍是专注在采数。我们在做设计的时候经常强调“高内聚,低耦合”,其一目的就是为了降低各模块的耦合度,削弱模块间的关联度。回到我前面提的那套老系统,数据采集使用了第三方ETL工具,这款ETL工具或许没有定时调度功能,以前的开发人员便设计出了两套调度方案,方案1:使用crontab定时调度etl工具;方案二:在java应用远程调度shell脚本定时启动采数,java应用则使用第三方调度应用定时调度。从实现上两个方案都没问题,但从设计的角度分析,我们会发现方案一存在一定弊端:偏系统底层、无法视图化、维护成本高,如果需要临时调度一次采数,需要具备一定linux技能才能完成操作,这无形增大了系统的维护难度;方案二相较方案一略增加了复杂度,实际上也规避不了以上提到的弊端,调度强依赖第三方应用,在多任务并发的情况下还可能威胁到服务器的稳定。在后续的维护开发中,我们也不得不投入了大量的人力维持采数功能的正常运行。
data-pipeline源自我以前的一次无意实现的demo,在经过对老系统的思考,在此demo的基础上进行了二次重构。data-pipeline并不像主流ETL工具那么强大,主要的优势就是简单、灵活、轻量级。基于spingboot、quartz实现的纯java应用,只需具备java技能就能进行二次开发维护,虽然目前仅支持mysql、oracle两种类型的数据传输,但通过简单集成实现,也能满足对ES、nosql,等存储介质的数据传输。data-pipeline使用quartz实现任务的定时调度,quartz本身也提供了分布式调度的解决方案,所以data-pipeline无疑也支持分布式部署。正所谓一个好汉三个帮,一台机器干不完的活,便多加两台机器,data-pipeline会把执行任务分配到任何一台机器,如果某台机器宕机,其他机器到执行时间也能继续执行任务。关于quartz的分布式调度,有兴趣的朋友可以单独了解下。下面开始介绍data-pepeline的安装过程:
安装教程
- 下载源码:
[data-pipeline: 基于springboot实现分布式的数据采集应用 (gitee.com)](https://gitee.com/juque-framework/data-pipeline)
- 在mysql创建数据库:data-pipeline,其他数据库需要自行适配DDL、DML脚本;
- 执行data-pipeline-server/bin下面的DDL、DML脚本;
- 根据实际环境调整如下配置:
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/data-pipeline?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: root
- 启动应用,控制台访问路径:http://localhost:8080;
- 默认帐号密码:admin / 123321
- 也可以下载发行版:release-*.zip,调整application- *.yml配置,启动应用:startup.sh / startup.cmd dev(对应环境的profile)
应用依赖
juque-framework是本人使用空余时间维护技术栈的一个gitee集合,data-pipeline的maven依赖统一由juque-framework管理,部分工具类引用自framework-common,都可以在此gitee集合下面找到。本地编译,可以先把这两个工程clone到本地,并install。
前端是基于vue-next-admin前端框架二次开发,详情请移步:https://gitee.com/lyt-top/vue-next-admin。vue-data-pipeline的gitee坐标:vue-data-pipeline: 数据采集应用的前端 (gitee.com)
应用预览