本篇是第 1 章第 2 节,位于定义之后、范式之前,先把后面会反复出现的组件名词钉死,避免读文档时张冠李戴。
Spoon 是图形设计器,你拖拽步骤、连 hop 都在它里面完成,但它本身不执行数据,只是产出 .ktr(转换)和 .kjb(作业)这类 XML 元数据文件。我们团队约定:本地只装 Spoon 做设计,执行一律上服务器,这样设计和运行环境解耦。
Pan 是转换的命令行执行引擎,负责把一个 .ktr 跑起来;Kitchen 是作业的命令行执行引擎,负责调度和串联多个转换或系统动作。一句话记忆:Pan 管「数据怎么流」,Kitchen 管「事情什么顺序做」。这个区分贯穿全册,混用会导致逻辑错乱。
Carte 是一个轻量 HTTP 服务,用来把转换或作业发布到远程节点,从而支持集群和并行。我们在数据量大的月份会起多个 Carte 实例分担负载。它和 Spoon 的关系是:Spoon 设计、Carte 执行,二者通过元数据而非代码耦合。
术语上要分清「步骤 step」和「跳 hop」:步骤是转换里的处理单元(如排序、过滤),跳是步骤之间的数据通道。作业里对应的是「作业条目 job entry」和「连接 connection」。我们评审转换时首先数跳的数量,跳太多往往意味着结构可以化简。
还有「资源库 repository」与「文件」两种存法:资源库把元数据放进数据库,便于多人协作和版本管理;文件就是落盘的 .ktr/.kjb,便于进 Git。我们生产环境用文件加 Git,因为资源库在灾备时反而多一个依赖。这个取舍后面第九章还会展开。
下面这段 bash 给出了可直接落地的配置,输入来自上一步、输出写入目标端:
# 四个组件的日常入口 Spoon.sh # 图形设计器,本地启动 Pan.sh /file:a.ktr -param:d=2026-08-25 # 跑转换 Kitchen.sh /file:a.kjb -param:d=2026-08-25 # 跑作业 Carte.sh 8080 # 启动远程执行节点
四个命令对应四种角色。我们给新人一张便签就写这五行,先记住谁执行什么,再深究内部机制。
<job> <name>nightly_etl</name> <entry> <name>抽取</name><type>TRANS</type><filename>extract.ktr</filename> </entry> <entry> <name>汇总</name><type>TRANS</type><filename>aggregate.ktr</filename> </entry> <connection><name>结果库</name></connection> </job>
作业文件里每个 entry 是一个「作业条目」,上面这段把两个转换串起来,相当于用 Kitchen 统筹 Pan。注意作业本身不处理行数据,它只编排。
有人把本该用 Kitchen 串的三个转换,写成了三个独立 Pan 定时任务,彼此靠共享表「碰头」,结果某天上游延迟,下游空跑了一整夜。
改成单个 .kjb 作业,用作业条目按顺序串起三个转换,并设置「前一步失败则整体失败」。
Kitchen.sh /file:nightly_etl.kjb -param:d=${yesterday} # 作业内顺序:抽取 -> 汇总 -> 导出,任一步非0退出码即中断
依赖关系被显式表达,空跑问题消失,且失败点一眼可见。
根因是「编排逻辑」不该散落在操作系统定时器里,而该由作业承载。Kitchen 存在的意义正是把顺序和依赖说清楚。
若要多机并行,可在作业条目里把转换指向不同 Carte 节点,作业仍只负责编排,执行下放到节点。
误区:在 Spoon 里直接连生产库调试。应在设计器里连测试库,生产执行通过参数化连接完成。
误区:把跳当成「函数调用」。跳只是数据流通道,没有返回值概念,控制流要交给作业。
取舍:新手先吃透 Pan+Kitchen 两条链路,Carte 等资源库用到再学,避免一上来被集群概念劝退。

Spoon 是图形设计器,你在这里画转换与作业,但它不是生产执行器。Pan 在命令行跑单个转换,适合被调度系统(如 cron、Airflow)调用;Kitchen 跑作业,负责编排多个转换与运维动作;Carte 是一个常驻的轻量 Web 服务,接受远程分发任务,是集群与远程执行的基础。理解这点很关键:开发用 Spoon,运行用 Pan/Kitchen/Carte,不要把「能在 Spoon 里跑」等同于「能在生产跑」。
# Kitchen 运行一个作业,注入运行日与环境变量(输入:.kjb 文件;输出:执行日志+退出码) kitchen.sh /file:/jobs/orders_pipeline.kjb \ -param:p_day=2026-08-25 \ -param:p_env=prod \ -level:Detailed # 退出码 0=成功;非0=失败,调度系统据此触发告警与重试
| 入口 | 跑什么 | 典型场景 |
|---|---|---|
| Spoon | 设计/调试 | 画图、单步验证 |
| Pan | 单个转换 | 调度单转换 |
| Kitchen | 作业 | 编排多转换+运维 |
| Carte | 远程/集群 | 分发执行、横向扩展 |