Flink CDC里用Linux脚本编写的CDC任务,同步整库,但是只有一个表在同步数据,这是咋回事?./flink run -Dexecution.checkpointing.interval=60s -Dparallelism.default=1 -c org.apache.doris.flink.tools.cdc.CdcTools /usr/resource/flink/flink-1.18.0/lib/flink-doris-connector-1.18-1.5.0.jar mysql-sync-database --database gaming_center --mysql-conf hostname=127.0.0.1 --mysql-conf server-id=5582 --mysql-conf username=root --mysql-conf password=sjjssWSJNXI_kasnqk --mysql-conf database-name=gaming_center --including-tables "activity_redpack|agent_fair_commission_config|cfg_bonus|cfg_firebase_channel|game_jogo|third_game|tust_pay_log|tust_transfer_log|uwin_pay_withdraw_log" --sink-conf fenodes=127.0.0.1:8030 --sink-conf username=root --sink-conf password= --sink-conf jdbc-url=jdbc:mysql://127.0.0.1:9030 --sink-conf sink.label-prefix=label1 --table-conf replication_num=1
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您提供的信息和知识库中的相关资料,以下是可能导致Flink CDC任务中仅有一个表在同步数据的原因分析及解决方法:
MySQL服务器可能配置了Binlog_Do_DB
或Binlog_Ignore_DB
参数,导致某些表的增量数据无法被Flink CDC捕获。
- 您可以通过以下命令检查MySQL的Binlog过滤器配置:
SHOW MASTER STATUS;
查看结果中的Binlog_Do_DB
和Binlog_Ignore_DB
字段。如果Binlog_Ignore_DB
包含gaming_center
数据库,或者Binlog_Do_DB
未包含gaming_center
,则会导致部分表的数据无法同步。
解决方法: - 确保MySQL的Binlog过滤器未忽略gaming_center
数据库。 - 如果需要修改Binlog过滤器,请调整MySQL配置文件(如my.cnf
)并重启MySQL服务。
including-tables
正则表达式匹配问题您在命令中使用了--including-tables
参数来指定需要同步的表列表,但可能存在正则表达式匹配不准确的问题。例如: - activity_redpack|agent_fair_commission_config|...
是一个正则表达式,用于匹配表名。 - 如果表名中存在大小写敏感性问题,或者正则表达式未正确匹配所有目标表,则可能导致部分表未被同步。
解决方法: - 确保including-tables
参数中的正则表达式能够正确匹配所有目标表。 - 如果表名区分大小写,建议在正则表达式中明确指定大小写,或者使用(?i)
标志启用不区分大小写的匹配。例如:
--including-tables "(?i)activity_redpack|agent_fair_commission_config|..."
如果某些表在全量阶段发生了表结构变更(如新增列、修改列类型等),可能会导致这些表的增量数据无法同步。
根据知识库中的说明,表结构变更的同步依赖于上游表的数据变更事件。如果上游表在全量阶段发生表结构变更,但无新增数据或数据变更事件,则不会触发下游表的同步。
解决方法: - 停止当前作业,删除下游表,并重新启动作业以无状态方式同步数据。 - 避免在同步过程中对上游表进行不兼容的表结构变更。
Flink CDC Source的tableList
参数要求表名包含数据库名(如gaming_center.activity_redpack
)。如果tableList
配置错误,可能导致部分表未被正确识别。
解决方法: - 检查--mysql-conf database-name=gaming_center
和--including-tables
参数是否正确。 - 确保tableList
参数中每个表名都包含数据库名。例如:
--including-tables "gaming_center.activity_redpack|gaming_center.agent_fair_commission_config|..."
如果Flink作业的Checkpoint间隔过长(如60秒),或者Task Manager的CPU资源不足,可能导致部分表的数据未能及时同步。
根据知识库中的说明,finish split response timeout
异常通常与Task Manager的CPU资源不足有关。
解决方法: - 调整Checkpoint间隔时间,建议设置为更短的时间(如10秒):
-Dexecution.checkpointing.interval=10s
如果Sink端(如Doris)的表配置存在问题,可能导致部分表的数据无法写入。例如: - Sink端表的主键冲突。 - Sink端表的列类型与源表不一致。
解决方法: - 检查Sink端表的主键配置,确保主键唯一性。 - 确保Sink端表的列类型与源表一致。如果不一致,需手动调整Sink端表的列类型。
根据上述分析,您可以按照以下步骤排查问题: 1. 检查MySQL的Binlog过滤器配置,确保未忽略gaming_center
数据库。 2. 确认including-tables
正则表达式是否正确匹配所有目标表。 3. 检查是否有表在全量阶段发生表结构变更,并采取相应措施。 4. 确保tableList
参数中每个表名都包含数据库名。 5. 调整Checkpoint间隔时间和Task Manager资源。 6. 检查Sink端表的主键和列类型配置。
通过以上步骤,您应该能够定位并解决Flink CDC任务中仅有一个表在同步数据的问题。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。