1.2 核心组件与术语


1.2 核心组件与术语

Spoon、Pan、Kitchen、Carte 到底谁在干活

本篇是第 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 等资源库用到再学,避免一上来被集群概念劝退。

01-02-fig01

深入:四个执行入口各自怎么用

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 当生产执行器:Spoon 跑的是带 GUI 上下文的环境,生产要用 Pan/Kitchen。
  • 混淆转换与作业:转换是数据流(行级),作业是控制流(条目级),二者不可互相替代。
  • 术语记混 step/hop/entry:step 是转换里的步骤,entry 是作业里的条目,hop 是二者各自的连线。

💡 关键直觉

  • 一条铁律:转换管数据、作业管事情。凡「先 A 后 B 再判断」用作业,「对每行数据做变换」用转换。
  • Carte 存在的意义是「把执行从设计机解放出来」,让多台机器能分担同一转换的分片。
入口 跑什么 典型场景
Spoon 设计/调试 画图、单步验证
Pan 单个转换 调度单转换
Kitchen 作业 编排多转换+运维
Carte 远程/集群 分发执行、横向扩展

作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U