Flink CDC用2.2.1的时候,系统会偶尔报这个错误?

Flink CDC用2.2.1的时候,系统会偶尔报这个错误?image.png
binlog为row的形式,这个有解决办法吗?1到2个月就会报错一遍

展开
收起
真的很搞笑 2023-11-07 19:47:19 61 分享 版权
阿里云 AI 助理回答

根据您提供的问题描述,Flink CDC在使用2.2.1版本时,系统偶尔会报错“binlog probably contains events generated with statement or mixed based replication format”,即使Binlog格式已经设置为ROW形式,仍然会出现该问题。以下是详细的分析和解决方案:


问题原因

  1. Binlog格式不一致
    尽管您已将Binlog格式设置为ROW,但MySQL服务器可能在某些情况下生成了非ROW格式的事件(例如Statement或Mixed格式)。这可能是由于以下原因:

    • MySQL实例的全局配置未正确生效。
    • 某些特定会话(Session)覆盖了全局Binlog格式设置。
    • 数据库中存在历史遗留的非ROW格式事件。
  2. CDC作业读取Binlog的速度较慢
    如果CDC作业处理Binlog的速度较慢,可能导致读取到过期的Binlog文件,而这些文件中可能包含非ROW格式的事件。

  3. MySQL服务器清理Binlog文件
    MySQL服务器上的Binlog文件保留时间较短,可能导致CDC作业在重新启动时无法找到所需的Binlog文件,从而引发类似错误。


解决方案

1. 确保Binlog格式全局生效

  • 检查当前MySQL实例的Binlog格式是否为ROW:
    SHOW VARIABLES LIKE 'binlog_format';
    
  • 如果结果不是ROW,请将其设置为ROW格式:
    SET GLOBAL binlog_format=ROW;
    
  • 重要提示:确保所有会话(Session)都使用ROW格式。可以通过以下命令检查会话级别的Binlog格式:
    SHOW SESSION VARIABLES LIKE 'binlog_format';
    

2. 增加Binlog文件的保留时间

  • 检查当前Binlog文件的保留时间:
    SHOW VARIABLES LIKE 'expire_logs_days';
    
  • 如果保留时间较短(例如默认值为0或1天),建议将其增加至7天或更长时间:
    SET GLOBAL expire_logs_days=7;
    
  • 注意:此参数仅对新生成的Binlog文件生效,历史文件不会受到影响。

3. 提升CDC作业的处理性能

  • 如果CDC作业处理Binlog的速度较慢,可能会导致Binlog文件被清理或读取到过期文件。建议采取以下措施:
    • 增加资源分配:为Flink作业分配更多的CPU和内存资源,以加快数据处理速度。
    • 优化下游算子:检查是否存在反压(Backpressure)问题,尤其是聚合算子或Sink算子。如果存在反压,需优化相关算子的逻辑或增加并行度。

4. 配置Debezium参数以兼容非ROW格式事件

  • 在Flink CDC的配置中,添加以下参数以避免因非ROW格式事件导致的报错:
    'debezium.event.deserialization.failure.handling.mode' = 'warn'
    
  • 此参数的作用是:当遇到无法解析的事件时,仅记录警告日志而不中断作业。

5. 定期检查MySQL实例的健康状态

  • 确保MySQL实例的网络连接稳定,避免因网络问题导致CDC作业读取Binlog失败。
  • 如果使用的是阿里云RDS MySQL,请检查其日志保留策略。RDS MySQL的日志保留策略通常有两个条件:
    • 最长保留时间为18小时。
    • 最大占用存储空间的30%。 如果写入量较大,可能导致Binlog文件被提前清理。建议调整RDS MySQL的Binlog过期策略,确保Binlog能正常被读取。

其他建议

  • 升级Flink CDC版本:Flink CDC 2.2.1可能存在已知问题,建议升级至最新稳定版本(如2.3.x或更高版本),以获得更好的兼容性和稳定性。
  • 监控与告警:建议在Flink作业中配置监控指标(如Binlog读取延迟、反压情况等),并设置告警规则,以便及时发现和解决问题。

总结

通过以上步骤,您可以有效解决“binlog probably contains events generated with statement or mixed based replication format”报错问题。重点在于确保Binlog格式全局生效、增加Binlog保留时间、提升CDC作业性能以及合理配置Debezium参数。如果问题仍然存在,建议进一步排查MySQL实例的配置和网络环境。

希望以上内容对您有所帮助!您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。

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

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

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