# data-pipeline **Repository Path**: juque-framework/data-pipeline ## Basic Information - **Project Name**: data-pipeline - **Description**: 基于springboot实现分布式的数据采集应用 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2023-04-04 - **Last Updated**: 2024-07-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # data-pipeline #### 介绍 基于springboot实现分布式的数据采集应用 #### 软件架构 1. 目前已支持mysql、oracle的端对端数据采集; 2. 集成quartz实现分布式任务调度,支持热扩展,采数任务过多,可部署多节点,但集群必须连接同一个mysql数据库,否则无法实现任务的分布式的调度; 3. 设计上使用任务组的概念,即多个任务打包成组按顺序执行; 4. 预检:任务的一种类别,预检类任务不会参数数据传输,常用于判断源端数据是否已准备完成,只要脚本执行结果集大于0就是true; 5. 采数:任务的一种类别,负责数据的端对端传输; 6. 任务组:一个组内的任务会按照顺序逐个执行; 7. mysql、oracle已支持insert、update、delete三种形式的写入,预计未来会实现saveOrUpdate; #### 安装教程 1. 从gitee clone代码; 2. 在mysql创建数据库:data-pipeline,其他数据库需要自行适配DDL、DML脚本; 3. 执行data-pipeline-server/bin下面的DDL、DML脚本; 4. 根据实际环境调整如下配置: ```yaml 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 ``` 5. 启动应用,控制台访问路径:http://localhost:8080; 6. 默认帐号密码:admin / 123321 7. 也可以下载发行版:release-*.zip,调整application-*.yml配置,启动应用:startup.sh / startup.cmd dev(对应环境的profile) #### 使用说明 1. 读数脚本单独维护,提高脚本的复用性; 2. 任务是最细粒度的执行单元,每个任务必须指定一个脚本,分预检和采数两类; 3. 任务组是最小调度单元,quartz调度的是任务组,而不是任务,所以即使只有一个任务,也需要配置对应的任务组; 4. quartz的底层实际是使用数据库的行级别锁实现的分布式调度,所以任务组在集群中应该是被随机调度,但不会同时在两个实例中执行; 5. 控制台支持手动执行任务; 6. 每个任务组调度一次都会生成一个批次号,在执行记录页面可根据批次号查看一次完整的执行过程; 7. 预检只要求结果集返回是否大于零,大于零则是true,并继续执行其他任务,小于零则中断一次直行; 8. 调度和执行是两个过程,调度完成不代表执行已结束,一次任务执行结束的时间应看最后一个任务的结束时间; #### 相关博客 1. 介绍:https://www.jianshu.com/p/cdad416a32a1 2. 数据模型:https://www.jianshu.com/p/211e4e2878ff 3. 驱动扩展:https://www.jianshu.com/p/cfd949b9fd4a 4. 集成quartz:https://www.jianshu.com/p/d023ab90e8c5 #### 应用截图 ![1.png](https://upload-images.jianshu.io/upload_images/28714319-8c824185f102f213.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp) ![2.png](https://upload-images.jianshu.io/upload_images/28714319-b8ea049df4b7df78.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp) ![3.png](https://upload-images.jianshu.io/upload_images/28714319-829d2931207d1211.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp) ![4.png](https://upload-images.jianshu.io/upload_images/28714319-3091b88bbf3635d6.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp) ![6.png](https://upload-images.jianshu.io/upload_images/28714319-fc7f015c80af1cbe.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp) #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)