本文说明 YAML 作业中
pipeline 块支持的配置项。这些参数作用于整个作业,与具体的 Source、Sink 类型无关。Source 与 Sink 各自的参数请参考对应的连接器文档。
pipeline 块是作业定义中必需的部分,不能为空,但其中的每个参数都是可选的。
快速示例
source:type: mysqlname: MySQL Sourcehostname: 127.0.0.1port: 3306username: adminpassword: passtables: adb.\\.*server-id: 5401-5404sink:type: dorisname: Doris Sinkfenodes: 127.0.0.1:8030username: rootpassword: passpipeline:name: Sync MySQL to Dorisparallelism: 4local-time-zone: Asia/Shanghaischema.change.behavior: LENIENToperator.uid.prefix: cdc-sync
配置项
参数 | 是否必填 | 默认值 | 类型 | 说明 |
name | optional | Flink CDC Pipeline Job | String | 作业名称,会作为 Flink 集群中的作业名显示。 |
parallelism | optional | 1 | Integer | 作业的全局并发度。 |
local-time-zone | optional | systemDefault | String | 作业级别的本地时区,用于时间类型字段的转换。 默认值 systemDefault 表示使用作业运行环境的系统时区, 跨时区部署时结果可能不一致,建议显式配置。 取值可以是完整时区名(如 Asia/Shanghai、America/Los_Angeles), 也可以是自定义时区 ID(如 GMT+08:00)。 |
execution.runtime-mode | optional | STREAMING | String | 作业的运行模式,可取 STREAMING 或 BATCH。 设为 BATCH 时按批语义执行,可用于一次性全量同步。 注意:部分 Source 在 BATCH 模式下对启动模式有限制, 例如 MySQL 只允许 snapshot。 |
schema.change.behavior | optional | LENIENT | String | 表结构变更的同步策略,可取 IGNORE、LENIENT、 TRY_EVOLVE、EVOLVE、EXCEPTION,取值大小写不敏感。 详见「表结构变更策略」章节。 |
schema.change.skip-duplicate-column.enabled | optional | false | Boolean | 当目标表结构中已存在同名列时,是否跳过该新增列事件。 默认为 false,即保留历史行为,遇到重复列时 schema 校验失败。 |
schema.change.skip-create-table.enabled | optional | false | Boolean | 是否跳过向下游执行建表,同时保留该事件用于内部表结构跟踪。 仅当目标表已提前创建且与作业的表结构兼容时才可开启。 |
route-mode | optional | ALL_MATCH | String | 路由规则的匹配模式。 ALL_MATCH:应用所有匹配的路由规则。 FIRST_MATCH:只应用第一条匹配的规则并停止后续匹配。 |
operator.uid.prefix | optional | (none) | String | 作业中所有算子 UID 的统一前缀。 未设置时由 Flink 自动生成 UID。建议显式设置,以便算子 UID 稳定可识别, 便于有状态升级、问题排查和 Flink UI 诊断。 |
schema.operator.uid | optional | $$_schema_operator_$$ | String | 表结构算子的唯一 ID,用于算子间通信,必须在所有算子中保持唯一。 已废弃,请使用 operator.uid.prefix 代替。 注意:该参数与 operator.uid.prefix 不能同时指定。 |
schema-operator.rpc-timeout | optional | 3min | Duration | 表结构算子等待下游表结构变更应用完成的超时时间。 下游(如 Doris、StarRocks)执行 DDL 较慢时,可适当调大该值。 |
LENIENT 模式的事件重写
LENIENT 是默认策略,它会在应用前重写部分事件,以避免下游丢数据:
新增列:新增的列统一转为可空(nullable)后添加,避免下游存在历史数据时新增非空列失败。
删除列:不真正删除该列,只是把该列转为可空;如果该列原本就是可空,则不做任何操作。
重命名列:不真正重命名,而是添加一个可空的新列(新列名),必要时再把旧列转为可空。
其它变更(如修改列类型):原样应用。
此外,
LENIENT 模式下默认不会把 drop.table(删除表)和 truncate.table(清空表)事件发送到下游,以避免误删数据。其它策略下默认不排除任何事件。该默认行为仅在完全没有配置 exclude.schema.changes 时生效。
按事件类型精细控制
如果需要按事件类型分别控制,可以在
sink 块配置 include.schema.changes 与exclude.schema.changes,后者优先级更高。可配置的事件类型如下:事件类型 | 说明 |
create.table | 创建表。 |
add.column | 新增列。 |
alter.column.type | 修改列类型。 |
drop.column | 删除列。 |
rename.column | 重命名列。 |
drop.table | 删除表。 |
truncate.table | 清空表数据。 |
支持部分匹配,例如传入
drop 等价于同时传入 drop.column 与 drop.table。
建表事件是所有后续表结构变更的基础。显式指定
include.schema.changes 时,create.table 会被自动加入,除非通过 exclude.schema.changes 明确排除它。
示例:
sink:include.schema.changes: [create.table, column] # 包含建表与所有列相关事件exclude.schema.changes: [drop.column] # 但排除删除列
子配置块
pipeline 块下除了上述参数,还支持两个子配置块。user-defined-function
声明自定义函数(UDF),供
transform 块中的 projection 与 filter 引用。pipeline:user-defined-function:- name: addoneclasspath: com.example.functions.AddOneFunctionClass- name: formatclasspath: com.example.functions.FormatFunctionClassoptions:format: '%S'
字段 | 是否必填 | 说明 |
name | required | 函数名,在 transform 表达式中按此名称引用。 |
classpath | required | 函数实现类的全限定名。 |
options | optional | 传给函数的配置项,以键值对形式声明。 |
model
声明内置模型,供
transform 块引用。模型是内置提供的函数,只需指定模型类名,无需写完整 classpath。pipeline:model:- model-name: my-modelclass-name: BuiltInModelClassoption-key: option-value
字段 | 是否必填 | 说明 |
model-name | required | 模型名,在 transform 表达式中按此名称引用。 |
class-name | required | 模型类名,取内置模型名即可。 |
其它字段 | optional | 模型自身的配置项,按所选模型的要求填写。 |