批处理(软考架构师架构风格)
一、批处理风格核心定义批处理是经典数据处理架构风格属于数据流架构分支核心特征无实时交互数据先批量采集、暂存不边来边处理分阶段离线处理固定输入→顺序多阶段转换→批量输出不依赖外部实时响应运行时无用户 / 外部同步调用高吞吐、低实时性适合海量数据统计、清算、对账、报表。1. 核心四大特点软考必背考点批量输入数据源落地成文件 / 数据表一次性加载而非流式逐条消费阶段式转换流水线分层处理上一阶段输出作为下一阶段输入离线执行定时调度凌晨 / 非业务高峰不占用在线交易资源批量输出处理完成统一生成结果文件、报表、汇总库。2. 优缺点选择场景简答题考点优点架构简单、开发维护成本低资源可控错峰执行不影响在线业务天然支持海量数据汇总、复杂计算易重试、断点续跑、对账校验金融场景强适配数据一致性易保障全量数据统一计算。缺点延迟高无法实时获取计算结果数据异常只能整批重试单条脏数据会阻塞整批峰值资源占用大调度窗口不足会积压无法支撑实时查询、实时预警类需求。3. 适用 / 不适用场景选择题高频✅ 适合 银行夜间清算、T1 对账、日终报表、日志离线统计、批量代扣代发、大数据离线数仓、月度账单生成、税务批量申报。❌ 不适合 实时支付风控、实时用户推荐、实时监控告警、在线交互式查询。二、批处理标准分层架构软考标准模型标准三段式流水线考试画图 / 论述题标准结构数据采集层输入在线业务库、日志、上游文件落地到批量临时存储文件 / ODS 数据表批处理计算层核心流水线多阶段串行处理清洗→转换→汇总→校验结果输出层落地报表、结果库、对外传输文件、归档备份。配套调度组件定时任务框架XXL-Job、Airflow、DataX、Hadoop YARN、断点续跑、日志记录、异常告警。三、与管道过滤器、流式处理的区分易混淆考点批处理 vs 管道过滤器批处理全量数据一次性加载阶段执行完再进入下一阶段管道过滤器数据流逐条实时流转不用等全部数据到位。批处理 vs 实时流处理Flink/Spark Streaming批处理有明确数据边界昨日全量数据T1 延迟流处理无边界持续数据流秒级 / 分钟级实时输出。四、真实示例银行信贷 T1 批量代扣系统金融场景贴合软考真题业务业务背景银行每日凌晨执行客户贷款批量代扣前一日所有到期贷款客户信息存储在信贷业务库批量读取客户贷款、余额、还款计划校验账户状态、余额充足性扣划资金生成扣款流水汇总对账文件推送清算系统生成客户还款账单归档备份。 完全离线批处理白天不执行属于典型批处理架构落地。整体架构流程图信贷在线业务库 → 【采集阶段】抽取当日到期贷款数据 → 临时批量数据表 ↓ 【清洗阶段】过滤销户、冻结、逾期黑名单客户 ↓ 【计算阶段】匹配还款计划计算应扣本金利息 ↓ 【扣划阶段】批量调用核心账务扣划接口生成扣款流水 ↓ 【汇总校验阶段】统计成功笔数、失败笔数、总金额对账平衡校验 ↓ 输出1扣款流水表存入数据仓库 输出2清算对账文件推送总行清算系统 输出3客户日账单文件归档存储7年分阶段详细代码 / 业务逻辑示例阶段 1数据批量采集输入层使用 DataX 定时同步前一日到期贷款数据一次性加载 10 万条批量数据不逐条实时读取。-- 批量抽取SQL凌晨定时执行一次性获取全量待处理数据 INSERT INTO batch_loan_temp (loan_id,cust_id,repay_amt,account_no,due_date) SELECT id,customer_id,total_repay,bank_account,repay_date FROM biz_loan WHERE due_date DATE_SUB(CURDATE(),INTERVAL 1 DAY) AND status NORMAL;阶段 2数据清洗过滤第一处理阶段批量过滤无效数据删除黑名单、冻结账户整批过滤后生成清洗中间表。// Java批量处理分页分批读取统一过滤无实时交互 public void batchCleanData() { int pageSize 5000; long total batchTempMapper.countAll(); long pages total / pageSize 1; for (long i 1; i pages; i) { ListLoanTemp batchList batchTempMapper.selectPage(i, pageSize); ListLoanClean cleanList batchList.stream() .filter(item - !blackListMapper.exists(item.getCustId())) // 过滤黑名单 .filter(item - accountMapper.getStatus(item.getAccountNo()).equals(NORMAL)) // 账户正常 .map(this::convertToCleanData) .collect(Collectors.toList()); cleanMapper.batchInsert(cleanList); // 批量插入清洗后数据 } }阶段 3业务计算与批量扣款核心处理阶段批量计算本息循环批次扣划统一记录结果不实时返回客户。// 批量扣款核心逻辑离线批处理无前端实时等待 public void batchDeduct() { ListLoanClean allCleanData cleanMapper.selectAll(); MapString, ListLoanClean groupByAccount allCleanData.stream() .collect(Collectors.groupingBy(LoanClean::getAccountNo)); // 按账户批量扣划一批次千条统一调用账务核心 for (Map.EntryString, ListLoanClean entry : groupByAccount.entrySet()) { String account entry.getKey(); ListLoanClean deductList entry.getValue(); BigDecimal totalAmt deductList.stream() .map(LoanClean::getRepayAmt) .reduce(BigDecimal.ZERO, BigDecimal::add); // 批量调用扣划同步返回结果批量写入流水 DeductResp resp coreAccountApi.batchDeduct(account, totalAmt); saveDeductRecord(deductList, resp); } }阶段 4汇总对账校验收尾阶段全量数据统计校验借贷平衡异常批量标记。-- 批处理汇总统计SQL生成对账结果 INSERT INTO batch_check_result (batch_date,total_count,success_count,fail_count,total_amt,success_amt) SELECT 2026-07-01, COUNT(*), SUM(CASE WHEN statusSUCCESS THEN 1 ELSE 0 END), SUM(CASE WHEN statusFAIL THEN 1 ELSE 0 END), SUM(repay_amt), SUM(CASE WHEN statusSUCCESS THEN repay_amt ELSE 0 END) FROM batch_deduct_record; -- 对账校验扣款总额 账务扣划总额不平衡则标记批处理异常 SELECT a.success_amt, b.core_total_amt FROM batch_check_result a LEFT JOIN core_batch_log b ON a.batch_date b.batch_date WHERE ABS(a.success_amt - b.core_total_amt) 0;阶段 5批量输出文件最终输出生成固定格式 txt 对账文件批量上传文件服务器归档存储。# 输出对账文件示例内容批量输出产物 批次日期20260630 总笔数12689 成功笔数12451 失败笔数238 扣款总金额15689234.62 明细 LOAN001,CUST10001,652.30,SUCCESS LOAN002,CUST10002,1250.00,FAIL,余额不足配套调度与容错软考论述加分点调度工具XXL-Job 定时每日 02:00 触发批处理任务断点续跑每阶段执行完成记录批次状态失败后从当前阶段重跑无需从头计算异常处理整批失败发送邮件告警失败数据单独落异常表人工复核后重批资源隔离批处理使用离线数据库不占用在线交易库连接池避免影响白天业务。五、大数据场景批处理示例Hadoop MapReduce软考大数据考点场景网站访问日志日离线统计需求每日凌晨统计昨日所有页面访问 UV、PV、访问时长生成运营报表。输入昨日全量 Nginx 日志文件批量落地 HDFSMap 阶段批量读取日志提取用户 ID、页面 IDReduce 阶段批量聚合每个页面访问次数、独立用户数输出统计结果写入 Hive 数仓供 BI 报表查询。核心特征全部数据先存储再一次性计算无实时日志消费标准批处理架构。六、软考论述1. 简述批处理架构风格批处理架构属于数据流架构将完整数据集作为输入分多个离线阶段依次完成数据清洗、转换、聚合计算全部处理完成后批量输出结果。采用定时调度离线执行具备高吞吐、易对账、架构简单的优势适合 T1 统计、清算、批量数据加工缺点是数据延迟高无法满足实时业务需求。2. 批处理架构设计要点分层流水线设计采集层、处理层、输出层解耦批量分块处理避免一次性加载全量数据导致内存溢出增加批次状态记录支持断点续跑独立离线资源池隔离在线业务结果增加数据校验逻辑保障批量数据一致性完善异常归档、告警、重跑机制。