DataX 的一切行为都写在一份 JSON job 配置里。本章把这份配置拆成全局、Reader、Writer 三块,逐字段解释含义与默认值,并给出可套用的模板。配置写错一个字段,任务可能直接起不来,所以这一章值得逐行读。
能独立拼出一份完整的 job.json;说清 speed.channel、speed.byte、errorLimit 各自管什么;理解 Reader 的连接串、查询列、切分键怎么写;说清 Writer 的写入模式与冲突处理选项。
配置是三层结构:全局管调度与容错,两端管连接与读写。
| 配置块 | 关键字 | 常见误配 |
|---|---|---|
| 全局 | speed/channel | channel 过大撑爆内存 |
| Reader | connection/column | column 与查询不一致 |
| Writer | writeMode | 误用覆盖丢数据 |
4.1 JSON 结构与语法规范:一份最小可运行配置长什么样。
4.2 全局参数详解:speed、errorLimit、channel 的真实含义。
4.3 Reader 参数:连接、查询条件、并发设置。
4.4 Writer 参数:连接、写入模式、冲突处理。
本章是第二章架构的「操作化」:那些 channel、Record 概念在这里变成 JSON 字段。它又是第五章调优的输入——你先写出能跑的配置,再去调速度。第六章的部署也依赖本章产出的 job 文件。
前置是第二、三章。延伸建议把本章每个样例都存成模板,后续实战直接改字段。Transformer 相关独立主题已合并进配置实践,不再单列。
| 配置块 | 关键字 | 作用 |
|---|---|---|
| 全局 | speed | 并发限速 |
| 全局 | errorLimit | 容错 |
| Reader | connection | 连接查询 |
| Writer | writeMode | 写入语义 |
我们建议把本章每个样例存成模板,后续实战直接改字段。配置写错一个字符任务就起不来,所以这一章值得逐行读,而不是扫一眼就过。
星型拓扑把 N 乘 M 的对接降到 N 加 M,变更成本随之下降。
把复杂 join 留在计算引擎,DataX 只做贴源搬运。
配置进版本库、密码进环境变量,是跨环境复用的基础。
自定义插件最容易踩的坑是依赖冲突,provided 范围能治本。
Channel 是有界缓冲,填满即触发反压保护内存。
反压机制保护内存,看到任务变慢应去优化下游而非加并发。
Reader 和 Writer 互不知晓,正是插件能独立扩展的原因。
把转换逻辑下推到源库,通常比在 DataX 内部处理更高效。
DataX 的设计哲学是把连接差异收敛到插件,让核心只管调度与缓冲。
channel 数超过源端连接承受能力时,瓶颈会从 DataX 转移到数据库。
退出码接进调度系统,才能让失败在半夜被及时发现。
JVM 堆要给 Channel 缓冲留足空间,否则 GC 频繁拖慢吞吐。
关系型 Writer 的批量提交大小,要在往返开销和回滚成本间权衡。
writeMode 必须和数据更新语义对齐,不能凭感觉选。
orc 加 snappy 是 Hive 落地的常见稳妥组合,省空间且查询快。
日志里周期打印的读写速率,是定位瓶颈的第一手材料。
限速不是限制能力,而是给其他任务留出生存空间。
对象存储比 FTP 更适合做跨机房中转,因为它支持断点和内网加速。
机器核数、内存、带宽三者共同决定 channel 的甜点值。
调优的本质是在 CPU、网络带宽和磁盘 IO 之间找平衡点,不是堆资源。
preSql 里带 truncate 的任务,上线前必须二次确认目标表名。
监控指标和 DataX 日志交叉看,能锁定九成瓶颈。
把 DataX 当搬运工而非加工车间,链路才简单可排查。
rowkey 的散列前缀设计,能避免 HBase 写入热点。