Flink CDC3.0 MySQL抽数到Doris,要支持字段变更的话,就只能整库同步(tables: db_name..)吗?
我现在是tables参数写了个正则(tables: db_name.table_nameprefix.)来匹配我需要的几张表,作业可以正常运行。
但是今天发现当其它表(正则匹配之外的表)有新增字段的时候,会导致我上面的作业报错:
Caused by: java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Unable to apply SchemaChangeEvent for table "test_zbl_01.dms_cis_cis_qty_daily" without existing schema
表名“dms_cis_cis_qty_daily”在Yaml中的 tables 参数之外,但是这里却要尝试去做表结构变更,就找不到表,然后作业就一直报错
如图:tables 参数写了正则,然后也用了 route 来路由到目标表
根据你的描述,你正在使用Flink CDC 3.0将MySQL的数据抽取到Doris,并且你希望支持字段变更。目前你遇到的问题是当其他表(正则匹配之外的表)有新增字段时,会导致作业报错。
这个问题可能是由于Flink CDC在处理SchemaChangeEvent时无法找到对应的表导致的。为了解决这个问题,你可以尝试以下方法:
确保你的Flink CDC版本与MySQL的版本兼容。不同版本的CDC可能对SchemaChangeEvent的处理方式有所不同,确保你使用的是最新版本的CDC。
在Flink CDC的配置中,设置scan.startup.mode
参数为latest-offset
。这样,Flink CDC会在启动时从最新的偏移量开始读取数据,而不是从头开始。这可以避免因为新增字段导致的问题。
scan.startup.mode: latest-offset
如果你希望支持字段变更,可以考虑使用Flink SQL的动态表功能。这样,Flink会自动处理表结构的变更,而不需要手动指定表结构。你可以在Flink SQL中使用CREATE TABLE
语句创建一个动态表,并使用FROM
子句指定源表。例如:
CREATE TABLE dynamic_table (
... -- 定义表结构
) WITH (
'connector' = 'mysql-cdc',
'hostname' = 'localhost',
'port' = '3306',
'username' = 'root',
'password' = 'password',
'database-name' = 'db_name',
'table-name' = 'table_nameprefix.*' -- 使用通配符匹配多个表
);
然后,你可以使用这个动态表进行数据处理和输出到Doris。
mysql-> doris用doris的连接器, 支持多表整库, 支持字段变更,开启字段变更后, 会把整库的DML都获取到。 这个需要在代码里面过滤自己用的的表。3.0.1修复了
,此回答整理自钉群“Flink CDC 社区”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。