Flink CDC读取MySQL报这错误咋回事儿?

Flink CDC读取MySQL报这错误咋回事儿image.png

展开
收起
真的很搞笑 2023-05-14 21:22:53 157 分享 版权
阿里云 AI 助理回答

根据您提供的错误信息和知识库中的相关资料,以下是可能导致Flink CDC读取MySQL报错的原因及解决方案:


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

  • 问题原因

    • 如果您使用的是RDS MySQL 5.6的备库或只读实例,这些实例可能没有将数据写入Binlog文件,导致下游同步工具无法读取增量变更信息。
    • 全量阶段读取时间过长,可能导致最后一个分片数据量过大,出现OOM(内存溢出)问题,作业Failover后卡住。
    • 在全量到增量切换时,如果Checkpoint间隔时间设置过大(如20分钟),会导致作业延迟进入增量阶段。
  • 解决方案

    • 建议使用可写实例或升级RDS MySQL至更高版本。
    • 增加MySQL Source端的并发,加快全量读取速度。
    • 根据业务需求调整Checkpoint间隔时间,确保合理。

2. MySQL CDC表结构变更导致的错误

  • 问题原因

    • 在全量阶段,表结构是在作业启动时确定的,并记录在系统检查点中。如果在全量读取过程中对表进行了结构变更(如增加列),可能会导致Schema不匹配,从而抛出NullPointerException等异常。
  • 解决方案

    • 停止当前作业并删除下游同步表。
    • 无状态启动作业以重新读取数据。

3. MySQL CDC正则表达式配置问题

  • 问题原因

    • 如果您在table-name中使用了带逗号的正则表达式(如t_process_wi_history_\d{1,2}),Debezium会因逗号作为分隔符而无法解析,导致报错。
  • 解决方案

    • 使用括号将多个正则表达式组合起来,例如:
    'table-name' = '(t_process_wi_history_\d{1}|t_process_wi_history_\d{2})'
    

4. MySQL CDC Binlog消费过慢或不可用

  • 问题原因

    • 如果CDC作业消费Binlog太慢(如下游聚合算子或Sink算子长时间反压),可能导致Binlog被清理而不可用。
    • 阿里云RDS MySQL的日志保留策略通常为最长18小时或占用存储空间不超过30%,满足任一条件都会触发清理。
  • 解决方案

    • 调整RDS MySQL的Binlog过期策略,确保Binlog能正常被读取。
    • 对作业资源进行调优,避免反压传递到Source端。

5. MySQL CDC时区问题

  • 问题原因

    • 在解析Binlog数据中的timestamp字段时,如果CDC作业中配置的server-time-zone参数与MySQL服务器时区不一致,可能会导致时区相差8小时的问题。
  • 解决方案

    • 确保CDC作业中配置的server-time-zone参数与MySQL服务器时区一致。
    • 如果使用DataStream API自定义序列化器,需在解析timestamp类型数据时指定正确的时区信息。

6. MySQL CDC权限问题

  • 问题原因

    • 如果使用RDS MySQL作为源表,RAM用户可能没有权限下载OSS上的Binlog文件,导致报错sub account not auth permission
  • 解决方案

    • 给RAM用户添加下载备份文件的权限。

7. MySQL CDC连接问题

  • 问题原因

    • Flink默认只能连接同VPC下的MySQL。如果通过公网连接,需要配置NAT访问公网。
    • 如果是同VPC,需通过内网地址连接,并添加白名单。
  • 解决方案

    • 检查网络配置,确保Flink作业能够正确连接到MySQL实例。

8. MySQL CDC多表同步限制

  • 问题原因

    • 默认情况下,Flink单个作业只能同步20个MySQL CDC源表,因为MySQL CDC的默认连接池大小为20。
  • 解决方案

    • 修改connection.pool.size参数为更大的值,以支持更多表的同步。

9. MySQL CDC Binlog位点消费问题

  • 问题原因

    • 如果作业重启时选择从最新状态恢复,但所需的Binlog已被清理,会导致报错。
  • 解决方案

    • 确保作业重启时所需的Binlog未被清理。
    • 根据需求选择全新启动或从最新状态恢复。

10. 其他常见问题

  • 问题原因

    • 如果报错信息为Replication slot "xxxx" is active,可能是PostgreSQL的复制槽未释放。
    • 如果报错信息为Mysql8.0 Public Key Retrieval is not allowed,可能是MySQL用户使用了SHA256密码认证方式。
  • 解决方案

    • 手动释放复制槽:
    select pg_drop_replication_slot('rep_slot');
    
    • 允许MySQL用户使用原始密码方式访问:
    ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
    FLUSH PRIVILEGES;
    

以上是针对Flink CDC读取MySQL报错的详细分析和解决方案。如果您能提供具体的错误日志或上下文信息,可以进一步定位问题并提供更精准的解答。

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

大数据领域前沿技术分享与交流,这里不止有技术干货、学习心得、企业实践、社区活动,还有未来。

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