全部产品
Search
文档中心

实时计算Flink版:Flink CDC Route模块

更新时间:Feb 05, 2026

本文向您介绍在Flink CDC数据摄入作业中编写消息路由(Route)规则的语法。您可以在Flink CDC数据摄入作业的route模块中定义多条路由规则,指定上游表到下游表的映射关系。

Route规则参数

参数

含义

是否必填

备注

source-table

指定生效上游表。

支持使用正则表达式。

sink-table

指定数据路由的目标位置。

无。

replace-symbol

在使用模式匹配功能时,用于指代上游表名的字符串。

例如,当replace-symbol设置为<>时,可以将sink-table配置为sinkdb.<>。这样,来自上游的表table1会被写入到sinkdb.table1表中。

description

该route模块的描述信息。

无。

重要

修改Route模块的语句后,需要进行无状态启动。

使用示例

单表同步至单表

将上游表mysql_db.web_order中的数据路由到下游表sink_db.ods_web_order

route:
  - source-table: mysql_db.web_order
    sink-table: sink_db.ods_web_order
    description: sync a table to one destination table with given prefix ods_
image

单表同步至多表

将同一张表的数据分发给多个下游表,只需定义多条路由规则即可。例如将mydb.orders的数据会被同时分发到sink_dbbackup_sink_db两个数据库中。

route:
  - source-table: mydb.orders
    sink-table: sink_db.orders
  - source-table: mydb.orders
    sink-table: backup_sink_db.orders
image

多表同步至多表

可以在一个route块中使用YAML列表符号(-)定义多条规则,它们会同时生效。

route:
  - source-table: mydb.orders
    sink-table: ods_db.ods_orders
    description: sync orders table to ods_orders
  - source-table: mydb.shipments
    sink-table: ods_db.ods_shipments
    description: sync shipments table to ods_shipments
  - source-table: mydb.products
    sink-table: ods_db.ods_products
    description: sync products table to ods_products
image

分库分表同步

将上游source_db数据库中的所有表合并到下游sink_db.merged表中。

route:
  - source-table: source_db.\.*
    sink-table: sink_db.merged
    description: sync sharding tables to one destination table
image

整库同步

source_db数据库中的全部表一一对应地同步到sink_db中,并保持表名不变。

route:
  - source-table: source_db.\.*
    sink-table: sink_db.<>
    replace-symbol: <>
    description: route all tables in source_db to sink_db

使用replace-symbol参数定义的<>特殊字符串会被表名替代,从而实现源表到汇表的一一对应。

image

高级路由规则

Route模块支持完整的正则捕获组替换规则。

您可以在 source-table正则表达式中使用圆括号创建捕获组,并在sink-table中使用$1$2依次引用捕获的内容。

以下是一些常见的用例及对应的路由规则:

  • 将捕获的全部数据库统一增加前缀,并保持表名不变:

    route:
      - source-table: (\.*).(\.*)
        sink-table: ods_$1.$2

    其中,第一个捕获组($1)匹配完整的数据库名,第二个捕获组($2)匹配完整的表名。最后,根据库名表名组成完整的下游表ID。

  • 将捕获的全部数据库、表统一增加前缀:

    route:
      - source-table: (\.*).(\.*)
        sink-table: ods_$1.upstream_$2
  • 将捕获的全部数据库、表名拼合成下游表的名字,写入同一个数据库:

    route:
      - source-table: db_no_(\.*).table_no_(\.*)
        sink-table: sink_db.table_$1_$2

    此规则会从db_no_100.table_no_300中提取出两个捕获组(100300),并写入到 sink_db.table_100_300下游表中。