Flink CDC里有遇到过这个问题的吗?

Flink CDC里有遇到过这个问题的吗?cdc 2.4.2版本ecfd646adc63889d2ffa61c85f7798df.png

展开
收起
小小鹿鹿鹿 2024-02-06 20:13:03 60 分享 版权
阿里云 AI 助理回答

在使用Flink CDC 2.4.2版本时,可能会遇到一些常见问题。以下是根据知识库资料整理的相关问题及其解决方案:


1. MySQL CDC读取全量数据后不读增量数据

问题原因: - 如果使用的是RDS MySQL 5.6备库或只读实例,这些实例可能没有向日志文件写入数据。 - 全量阶段读取时间过长,导致最后一个分片数据量过大,出现OOM(内存溢出)问题。 - 进入增量阶段前需要等待一个Checkpoint,如果Checkpoint间隔时间设置过大,可能导致作业卡住。

解决方案: - 建议使用可写实例或升级RDS MySQL至更高版本。 - 增加MySQL Source端的并发度,以加快全量读取速度。 - 根据业务需求合理设置Checkpoint间隔时间。


2. Flink CDC作业失败后能否彻底退出,而不是重启?

问题详情:默认情况下,Flink CDC作业失败后会尝试重启。

解决方案: 通过修改Flink配置文件,指定具体的重启策略。例如,配置最多尝试重启两次,每次重启前等待10秒。如果两次重启均失败,作业将彻底退出:

restart-strategy: fixed-delay
restart-strategy.fixed-delay.attempts: 2
restart-strategy.fixed-delay.delay: 10 s

3. MySQL CDC使用table-name正则表达式不能解析逗号

问题原因:Debezium使用逗号作为分隔符,因此不支持带逗号的正则表达式。

解决方案: 使用括号将多个正则表达式组合起来。例如:

'table-name' = '(t_process_wi_history_\d{1}|t_process_wi_history_\d{2})'

4. 增量阶段读取的timestamp字段时区相差8小时

问题原因:CDC作业中配置的server-time-zone参数与MySQL服务器时区不一致。

解决方案: 在DataStream中使用自定义序列化器时,确保serverTimeZone参数正确配置时区信息。例如:

.properties.setProperty("server-time-zone", "Asia/Shanghai");

5. 报错:Replication slot "xxxx" is active

问题详情:Postgres CDC中,当复制槽被占用时会出现此错误。

解决方案: 1. 手动释放复制槽:

SELECT pg_drop_replication_slot('rep_slot');
  1. 自动清理复制槽:在Postgres Source配置中添加以下参数:
    'debezium.slot.drop.on.stop' = 'true'
    

6. 多个CDC作业导致数据库压力过大

问题详情:多个CDC作业同时运行可能导致数据库性能下降。

解决方案: 1. 将表同步到Kafka消息队列中,再通过消费Kafka中的数据进行解耦。 2. 合并多个CTAS作业为一个作业运行,并为每个MySQL CDC源表配置相同的Server ID,实现数据源复用,从而减小数据库压力。


7. 数据量不大但Flink读取时消耗大量带宽

问题原因:Binlog是整个实例级别的,记录所有数据库和表的变更。Flink CDC通过配置过滤特定表的变更记录,但过滤过程是在Debezium或Flink CDC连接器层面完成的。

解决方案: 通过Source复用避免更多的带宽使用。例如,多个作业共享同一个CDC Source实例。


8. 如何判断MySQL CDC作业是否已完成全量数据同步?

解决方案: 1. 通过监控告警页面的currentEmitEventTimeLag指标判断。当该指标大于0时,表示作业已完成全量数据同步,进入Binlog读取阶段。 2. 在MySQL CDC源表所在的TM日志中查找BinlogSplitReader is created日志,确认是否读取完全量数据。


9. 使用DataStream API构建MySQL CDC Source时如何配置tableList选项?

解决方案tableList要求表名包含数据库名,配置格式如下:

.tableList("yourDatabaseName.yourTableName")

10. 无法下载flink-sql-connector-mysql-cdc-2.2-SNAPSHOT.jar

问题原因:SNAPSHOT版本对应开发分支的代码,可能未发布到Maven中央仓库。

解决方案: 使用稳定版本,例如flink-sql-connector-mysql-cdc-2.1.0.jar,可以直接从Maven中央仓库获取并使用。


11. 报错:Encountered change event for table xxx.xxx whose schema isn't known to this connector

问题原因:Debezium未识别到表的Schema信息。

解决方案: 确保表的Schema信息已正确加载,或者在配置中显式指定表名和数据库名。


12. 报错:The primary key is necessary when enable 'Key: scan.incremental.snapshot.enabled'

问题原因:启用增量快照功能时,表必须包含主键。

解决方案: 确保目标表包含主键,或者禁用增量快照功能。


以上是针对Flink CDC 2.4.2版本常见问题的详细解答。如果您的问题未涵盖在上述内容中,请提供更多具体信息以便进一步分析。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

还有其他疑问?
咨询AI助理