【java】任务流批处理平台
一、目前痛点很多中小公司在做定时任务时都会遇到同一批问题订单状态变更、日初/日终巡检、历史数据回捞、全量扫描修复……这些任务有一个共同点数据量大、耗时长、反馈慢。典型痛点如下执行时间长且执行窗口敏感定时任务一旦跑得久会占用核心资源影响在线服务甚至逼得团队在低峰时段“卡点发版/卡点执行”。数据量大导致内存与超时风险无论是全量加载还是传统分页都可能在执行链路里触发 OOM、SQL 慢查、调度超时如 PowerJob/XXL-Job 超时等问题。多服务部署下任务执行效率差低版本 MySQL 在深分页、复杂扫描上的成本很高最终常常退化为“单机串行跑批”吞吐差、失败率高。过程不可见、结果不可追任务有没有执行执行到哪一步哪条数据失败失败原因是什么往往靠日志 grep治理成本极高。导出链路脆弱传统 Excel 导出在大数据量下非常容易撑爆 JVM 堆内存甚至导致服务雪崩。二、设计思路把一个“大任务”拆成三段能力这套方案不是“再写一个更复杂的定时任务”而是把职责分开SQL 数据分析系统负责“查哪些数据”异步导出系统负责“把数据稳定吐出去”批次处理系统负责“按批次消费 记录结果 告警反馈”三者合并后形成新的 TraceBatch 闭环任务编排内网 - 数据导出OSS/FTP/SFTP - 批次消费批处理系统 - 结果追踪与告警三、系统链路3.1 数据产出系统对内发起任务定时任务 / 一次性任务。新增 SQL 任务并进入审批流程。审批通过后执行 SQL。SQL 结果按固定阈值校验例如size 1进入告警或进入下一步。通过异步导出将数据写入 DAT/CSV/TXT上传到 OSS/FTP/SFTP。通知批次处理系统拉取并消费文件。数据产出系统收到结果回执任务结束。3.2 批次处理系统接收通知消息或回调。做文件校验完整性、格式、重复投递。读取 OSS/FTP/SFTP 文件。生成批次信息与批次明细。按批次消费逐条处理并记录成功/失败。失败告警 回溯查询能力。批次完成后回传执行状态。一句话总结查询与处理解耦导出与消费解耦执行与追踪解耦。四、为什么这套方案有效4.1 业务与数据处理解耦业务开发只关心“规则”和“处理动作”不再关心数据从哪里来SQL、文件、消息数据怎么分页失败如何重试结果怎么追踪结果是研发效率提升代码边界清晰维护成本下降。4.2 稳定性显著提升定时任务不再承载完整业务处理链路只负责计算查询条件触发导出发出通知耗时与资源占用明显下降。异步导出采用流式写出BufferedWriter / 流式游标内存基本可控任务激增时可通过队列削峰。4.3 可观测、可追溯批次系统保留批次主记录batch明细记录item错误码与失败原因告警通知记录做到“每条数据可回放、每次任务可复盘”。4.4 数据可备份、可补偿导出文件天然形成“冷备份”批次失败时可以二次回放。相比“任务失败后只能重跑整条 SQL”补偿粒度更细、成本更低。五、关键实现细节实战建议5.1 SQL 分析层先做“可执行性”再做“业务性”建议对 SQL 做三类治理风险拦截禁止无条件全表扫描、禁止无索引排序分页、禁止危险 DML。成本评估执行前估算行数与扫描成本超阈值走审批。参数化执行统一模板 变量避免拼接 SQL 注入风险。5.2 异步导出层放弃“大而全 Excel”拥抱“流式文本”大批量导出建议统一 CSV/DAT/TXT使用游标/分段查询 缓冲流逐行写出。单文件过大时自动分片如 10w 行/片。统一上传到 OSS/FTP/SFTP返回文件 URI 与元数据。好处是内存占用常量级、吞吐可预估、失败可重试。5.3 批次消费层主表 明细表双轨推荐模型batch_task批次级状态待处理/处理中/完成/失败batch_item明细级状态成功/失败/重试中核心能力幂等校验同一业务键不重复处理明细失败重试指数退避失败阈值告警如失败率 5%5.4 告警与通知建议至少包含任务启动告警可选超时告警失败率告警文件校验失败告警批次完成回执成功/部分失败/失败通知渠道可接企业微信、钉钉、飞书机器人。六、“缺点”与改进方案缺点 1批次数据备份会增加存储成本解决思路设定分层留档策略明细数据保留 30~90 天汇总数据保留 180~365 天冷热分层热库查近 30 天历史归档到对象存储或冷表。对明细参数JSON做压缩存储。缺点 2系统链路变长治理复杂度上升解决思路统一任务协议taskId、batchId、fileUri、checksum。统一状态机INIT/RUNNING/SUCCESS/PARTIAL_FAIL/FAIL。统一可观测面板QPS、耗时、失败率、积压量。七、适用场景以下场景非常适合 TraceBatch日初/日终巡检历史订单修复批量状态同步大促后数据回补大体量导出与离线加工不建议用于强实时、低延迟毫秒级联机交易链路需要强一致事务闭环的核心支付扣减流程八、参考批次处理系统sql数据分析