外观
补数演练 runbook
难度与前置
难度:中级
前置:已理解 rerun-catchup 里的互斥、级联、限流;本篇是演练操作手册,不重复展开原理。
读完能做什么:按清单跑完一次「干跑 → 小窗口真补 → 复盘」,证明团队能在不炸当日 SLA 的前提下补数。
适用场景
- 口径变更 / 埋点变更后,首次要回刷历史前
- 新主题链路上线,值班从未做过级联补数
- 故障后「敢不敢补」没把握,需要安全演练
不适用:
- 替代 rerun-catchup 本身(原理与策略以专篇为准)
- 生产上直接 30 天无限流真补当「演练」
- 实时状态 rewind(走 Checkpoint / EOS 域)
真实场景(一条)
主题链路已按专篇配好幂等与依赖,但从未演练。首次真补 T-3 一天时:
- 忘了暂停当日同
dt实例 → 与补数并行写 - 只补到 DWD,ADS
current未走门禁 → 看板短暂错数
事后补了本 runbook:先干跑清单,再只补 1 个非高峰 dt,全链路验收 + 切/不切 current 写清楚。第二次真补 7 天时,当日 P0 SLA 未违约,看板无脏读。
演练怎么做(步骤清单)
0. 声明:本篇 vs 专篇
| 问题 | 去哪 |
|---|---|
| 补数/重跑/追数怎么定义、互斥、级联、限流 | rerun-catchup |
| 今天这场演练谁拍板、按什么顺序勾清单 | 本 runbook |
| 写是否幂等 | 离线幂等 |
| 补完能不能给人看 | ADS 出数验收 |
1. 演练前:组班与范围(T-1 填完)
角色(可一人多岗,但名字要写上):
| 角色 | 职责 |
|---|---|
| 指挥官 | 开停演练、Go/No-Go |
| 调度操作 | 提交补数、限流、互斥暂停/恢复 |
| 数仓核对 | 层间行数/金额、主键 |
| 出口守卫 | ADS/API 门禁与是否切 current |
| 观察员 | 集群队列、P0 任务延迟 |
范围卡(填空):
text
演练 ID:
窗口:单个 dt = ________(优先选非月末/非大促日)
链路:ODS → … → ADS(表清单附后)
限流:最大并行分区数 = __(建议先 1)
是否切对外 current:是 / 否(首演建议「否」,只写 candidate)
回滚条件:diff > __% 或 P0 延迟 > __ 分钟 → 立即停
值班群 / 记录文档链接:2. 干跑(不写生产或只读检查)
按专篇策略口头/文档过一遍,不提交写任务:
- [ ] 影响面血缘已列出(专篇 §划定窗口)
- [ ] 与当日实例互斥方式已选:暂停同
dt/ 独立队列 / 锁表约定 - [ ] 每层写入模式确认为 overwrite/幂等(专篇 §幂等)
- [ ] 限流与错峰窗口已定(专篇 §追数节奏)
- [ ] 若涉及口径/埋点变更,变更单已关闭或标明「只补数不改义」
干跑失败 → 禁止进入真补。
3. 真补:最小窗口(建议 1 个 dt)
严格按 rerun-catchup 级联,一层一验收:
text
1) 打开互斥(暂停冲突实例或切入补数队列)
2) 补上游 → 验收行数/主键
3) 逐层下游 → 每层验收再往下
4) ADS:跑门禁;首演默认不切 current(只出 candidate)
5) 恢复日常调度 / 解除互斥
6) 记录耗时、队列使用率、是否触碰 P0操作时禁止:
- 扩大窗口「顺手多补几天」
- 跳过某层验收
- 门禁失败仍切
current
4. Go / No-Go 门闩
| 检查 | Go | No-Go(停并回滚互斥) |
|---|---|---|
| 本层 vs 上游 diff | ≤ 阈值 | 超阈值 |
| 集群 / 队列 | P0 未告警 | P0 延迟或排队爆了 |
| 对外出口 | 未误切或灰度正常 | 已误切且 diff 差 |
指挥官口头下令「继续 / 停止」;停止后按专篇回滚策略恢复日常实例。
5. 演练后复盘(当天 30 分钟)
写进演练记录(可贴值班文档):
text
演练 ID / 日期 / 参与人:
窗口 dt:
总耗时:
是否触碰 P0 SLA:
层间最大 diff:
是否切 current:
异常与改进(流程/权限/脚本):
下次真补建议窗口与并行度:改进项进 backlog;未复盘视为演练未完成。
6. 何时升级到「多日真补」
仅当连续 ≥ 2 次 单日演练 Go,且复盘无阻断项:
- 并行度按专篇限流阶梯上调(如 1 → 2 → 5)
- 仍与日常互斥;大窗口避开出数高峰
- 口径类回刷配合 埋点与口径变更 的「是否回刷」结论
常见坑(演练专用)
- 把生产大回刷当第一次演练
- 演练中临时改并行度/扩窗口
- 只练调度点击,不练核对与出口门禁
- 演练完不恢复互斥,当日任务一直停着
- 无指挥官,多人同时点重跑
- 复盘只说「成功了」,不定量耗时与 diff
如何验收(这场演练是否算过)
| 项 | 达标标准 |
|---|---|
| 干跑清单 | 全勾 |
| 真补窗口 | ≤ 约定(首演 1 个 dt) |
| 当日 P0 SLA | 未违约(或 No-Go 已及时停止) |
| 层间验收 | 每层有记录,diff ≤ 阈值 |
| 出口 | 未误切;或灰度/回滚符合 ads-publish |
| 复盘 | 当天完成,改进项有负责人 |
text
演练通过签字:
指挥官:________ 日期:________
「可进行多日真补」:是 / 否相关面试题
题库小程序链接待定;先用站内锚点占位。
- [ ] 题:首场演练真补窗口为什么限制在 1 个 dt?(考察点:真补窗口≤约定,当日 P0 SLA 不违约或 No-Go)→ 占位:
#todo-interview-backfill-drill-window - [ ] 题:层间验收怎么才算过?(考察点:每层有记录,diff≤阈值)→ 占位:
#todo-interview-backfill-drill-layer-check - [ ] 题:演练出口切流有什么红线?(考察点:未误切;或灰度/回滚符合 ads-publish)→ 占位:
#todo-interview-backfill-drill-cutover - [ ] 题:演练当天复盘缺什么不算过?(考察点:复盘当天完成,改进项有负责人)→ 占位:
#todo-interview-backfill-drill-retro
改写说明:操作型 runbook;策略细节一律指向 rerun-catchup,不重写专篇。无未公开公司队列名与表名。