标准答案

  1. 批量读取和写入能减少网络往返与事务开销,但要限制单批记录数、字节数和处理时间。
  2. 部分失败应能定位到单条或子批次,避免整个大批次反复重做。
  3. 对实时请求使用小批次或时间窗口,对离线任务可使用更大批次并设置检查点。
  4. 监控批次处理耗时、内存、失败率、重试量和最老未处理数据。

题目解析

批次变大可以减少网络往返和事务开销,但会增加锁持有、内存、单次延迟和失败重做范围。批次大小要同时受记录数量、总字节数和最大处理时间约束。

部分失败需要能够定位到单条或子批次,并记录处理进度。对实时请求优先控制延迟,对离线任务可以使用较大批次,但必须有检查点和可恢复游标。

压测不能只测没有失败的最高吞吐。还要注入超时、进程重启、重复执行和下游限流,确认批次缩小、重试和恢复不会造成新的积压。

常见误区

  • 误区:批次越大越高效。改正:同时限制内存、字节数、锁时间和失败重做成本,按真实数据分布压测。
  • 误区:部分失败只能整批回滚。改正:使用子批次、逐条结果或失败记录,避免成功工作被反复重做。
  • 误区:没有检查点,任务中断后从头处理。改正:保存可恢复游标、幂等键和进度状态,重启后从安全位置继续。

作者信息