# 四级调度系统 (Four-Level Schedule) ## 项目简介 四级调度系统是一个基于Spring Boot和Kafka的分布式任务调度系统,通过Producer-Consumer模式实现任务的生产与消费,并配备Manager模块进行实例管理和动态扩缩容。系统支持Docker容器化部署,能够根据任务积压情况和资源负载自动调整实例数量,实现高效的资源利用和任务处理。 ## 系统架构 系统由三个核心模块组成: 1. **schedule-producer**: 任务生产者模块,负责创建和发送任务到Kafka消息队列 2. **schedule-consumer**: 任务消费者模块,负责从Kafka消费并处理任务 3. **schedule-manager**: 管理模块,负责监控实例状态、管理Docker容器和动态扩缩容 ## 技术栈 - Java 8 - Spring Boot 2.7.18 - Spring Kafka 2.8.11 - Docker (通过Docker Java API) - Fastjson 1.2.83 - Lombok 1.18.30 ## 模块说明 ### schedule-producer 任务生产者模块,提供RESTful API用于创建和发送任务。 **主要功能:** - 接收任务请求 - 将任务序列化并发送到Kafka主题 - 支持任务重试机制 **配置说明:** - 服务端口: 8081 - Kafka服务器: 10.192.72.13:9092 - 默认主题: test-topic (6个分区) ### schedule-consumer 任务消费者模块,监听Kafka主题并消费任务。 **主要功能:** - 监听Kafka主题 - 消费并处理任务 - 支持手动提交offset **配置说明:** - 服务端口: 8082 - Kafka消费者组: yusp-topic-group - 监听主题: test-topic ### schedule-manager 管理模块,负责监控和管理解析服务实例。 **主要功能:** - 监控实例健康状态 - 管理Docker容器生命周期 - 根据任务积压和资源负载动态扩缩容 - GPU负载监控 **配置说明:** - 服务端口: 8083 - Docker守护进程地址: tcp://127.0.0.1:2375 - 心跳超时阈值: 30000ms - 最小活跃实例数: 3 - 最大活跃实例数: 10 - 任务积压阈值: 100 - GPU负载阈值: 80% ## 环境要求 - JDK 8+ - Maven 3.6+ - Docker (用于Manager模块) - Kafka 2.8+ ## 快速开始 ### 1. 克隆项目 ```bash git clone cd four-level-schedule ``` ### 2. 配置Kafka连接 修改各模块的`application.yml`文件,配置Kafka服务器地址: ```yaml spring: kafka: bootstrap-servers: :9092 ``` ### 3. 配置Docker连接 修改`schedule-manager/src/main/resources/application.yml`,配置Docker守护进程地址: ```yaml docker: host: tcp://:2375 ``` ### 4. 编译项目 ```bash mvn clean package ``` ### 5. 启动服务 分别启动三个模块: ```bash # 启动Producer java -jar schedule-producer/target/schedule-producer.jar # 启动Consumer java -jar schedule-consumer/target/schedule-consumer.jar # 启动Manager java -jar schedule-manager/target/schedule-manager.jar ``` 解析服务镜像打包: ```bash docker build -t parse-service:latest . ``` ## 测试指南 ### 发送任务 通过Producer模块提供的RESTful API发送任务: ``` POST http://localhost:8081/api/send 测试数据 { "topic":"schedule-topic", "key":"1", "message":"./examples/test1.pdf" } ``` ### 监控任务 Manager模块会自动监控任务处理情况和实例状态,并根据配置的阈值进行扩缩容。 ## 配置说明 ### Kafka配置 所有模块都使用相同的Kafka配置,包括bootstrap-servers、序列化器等。可根据实际环境调整。 ### Manager监控配置 Manager模块提供了丰富的监控配置选项: - `heartbeat-timeout`: 心跳超时阈值 - `min-active-instance`: 最小活跃实例数 - `max-active-instance`: 最大活跃实例数 - `task-backlog-threshold`: 任务积压阈值 - `gpu-load-threshold`: GPU负载阈值 ## 项目结构 ``` four-level-schedule/ ├── pom.xml # 父POM文件 ├── schedule-producer/ # 任务生产者模块 │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ └── resources/ │ └── test/ ├── schedule-consumer/ # 任务消费者模块 │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ └── resources/ │ └── test/ └── schedule-manager/ # 管理模块 ├── pom.xml ├── doc/ # 文档目录 └── src/ ├── main/ │ ├── java/ │ └── resources/ └── test/ ``` ## 常见问题 ### 1. Kafka连接失败 检查Kafka服务器地址和端口是否正确,确保Kafka服务正常运行。 ### 2. Docker连接失败 检查Docker守护进程是否启用,确保Docker API端口(2375)已开放。 ### 3. 实例无法自动扩缩容 检查Manager模块的监控配置是否合理,确保任务积压和资源负载达到阈值。 ## 许可证 本项目采用内部许可证,未经授权不得用于商业用途。 ## 联系方式 如有问题或建议,请联系项目维护者。