Sfoglia il codice sorgente

docs(kb): 93 加 ADR-04 DataX speed 三级注入,94 加 #23 对比行

- ADR-04:L1 conf/datax-tuning.conf / L2 ini [speed] / L3 CLI 三级合并
- 候选方案否决"只做 L1"、"全参数外配"、"合成 flag"
- kb/94 #23 新增对比行:硬编码 speed → 三级外配

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
tianyu.chu 1 settimana fa
parent
commit
68625143fe
2 ha cambiato i file con 24 aggiunte e 0 eliminazioni
  1. 23 0
      kb/93-架构决策.md
  2. 1 0
      kb/94-重构对比.md

+ 23 - 0
kb/93-架构决策.md

@@ -90,3 +90,26 @@
   - CDC(PG 逻辑复制 / MySQL binlog 流读):架构正路,需独立立项,**本阶段不取**(见 kb/12 CDC 演进节)
 
 - **反悔条件**:迁 CDC
+
+### ADR-04 DataX speed 三级注入(L1 conf / L2 ini / L3 CLI)
+
+- **状态**:草案
+  老代码 `job_config_generator.py:60-67` 把 speed 三参(channel / byte / record)按工作时段硬编码:07:50-19:00 走 `channel=10 / byte=10MB / record=40k`(保护业务 DB),其余时段走 `channel=6 / byte=256MB / record=100k`。时段边界和各档值完全写死在 Python 代码里,调优需要改代码 + 发布。压测 / 回填场景下 speed 是高频调参项,需要运行时覆盖能力。
+
+- **决策**:speed 三参走三级合并,优先级 L1 < L2 < L3。
+  - **L1** `conf/datax-tuning.conf`:项目级默认,承载严格/宽松时段 start/stop 边界 + 两档各 3 个 speed 参值,共 8 个 key;时段配置用 `HH:MM` 字符串,代码解析为 HHMM 整数比较
+  - **L2** DataX ini 新增可选 `[speed]` 段:单 ini 级覆盖 channel / byte / record;一旦在 L2 显式写了,忽略时段判断直接使用
+  - **L3** CLI `-channel / -byte / -record`:本次运行级覆盖,`bin/datax-{hive-import,hdfs-export}-starter.py` 暴露,逐层透传到 `dw_base.datax.cli gen-json` 子进程,最终到 `JobConfigGenerator`
+  - 合并发生在 `JobConfigGenerator.assemble()` 内存里,结果写进生成的 json(`job.setting.speed` + `core.transport.channel.speed`);ini / conf 文件本身不动
+  - 时段判断采用左闭右开 `[start, stop)`;每 key 的来源打印到 stdout 便于审计
+
+- **后果**:
+  - 正面:压测 / 回填 speed 调参不用改代码;时段分档逻辑可配,业务高峰期调整不用发布;单 ini 特殊场景可用 L2 覆盖;ADR 级改动只加约 350 行代码 + 10 条单测
+  - 负面:参数语义复杂度上升(3 层合并规则)——通过 `[tuning]` log 逐层打印缓解;`conf/datax-tuning.conf` 是新文件需同步到所有 worker(sync-all.sh 已覆盖)
+
+- **候选方案**:
+  - 只做 L1(conf 外配,不要 L2 L3)——否决,压测高频调 speed 不想改 conf 再部署
+  - 参数全外配(speed + reader.fetchSize + writer.batchSize)——否决,fetchSize/batchSize 低频调,现有 `ini 覆盖硬编码` 够用,外配反而复杂
+  - CLI 用合成 flag `--datax-conf key=value,...`——否决,speed 高频用独立 flag 更直观,Spark 入口风格参考
+
+- **反悔条件**:三级注入使用场景长期 <5%(即 L2 L3 基本不用),退回单层 conf;或者 DataX 被替换

+ 1 - 0
kb/94-重构对比.md

@@ -31,6 +31,7 @@
 | 20 | 测试覆盖 | 0 单测 | 47 条单测(path_utils 5 + worker 6 + partition 7 + runner 5 + batch 7 + entry 5 + cli 3 + mask 9) |
 | 21 | 可维护性 | bash 脚本 + 内嵌数组 + 多文件分散,新人上手须看 3+ 脚本理解 `multiple-hive → multiple → single` 调用链;改动易漏同步;无类型注解;错误信息模糊 | Python 分层模块职责单一;类型注解 + docstring;47 单测兜底;异常含上下文 |
 | 22 | 可扩展性 | 加新 reader 要改 `plugin_factory.py` 顶层 import 并扩 registry;加新脱敏类型要手写 querySql 或改 `plugins/reader/*.py` 代码 | 加新脱敏类型只改 `mask.py` 静态字典一行 / 动态正则一条;加新 ssh 命令子命令只在 `cli.py` 加 subparser;`plugin_factory` eager import 未变动(见 kb/90 §2.6 后延 ADR 的"plugin_factory 解耦"低优先级项) |
+| 23 | speed 调参 | `job_config_generator.py:60-67` 硬编码两档时段 + 两档 speed 三参,调优要改代码发布 | 三级注入:L1 `conf/datax-tuning.conf` 默认 + L2 ini `[speed]` 段 + L3 CLI `-channel/-byte/-record`,逐字段合并 + 审计日志(详见 kb/93 ADR-04) |
 
 ### 1.2 行为退化说明