FlinkCDC问题处理:Exceeded checkpoint tolerable failure threshold... checkpoint expired before completing

2 篇文章 0 订阅
2 篇文章 0 订阅

问题描述

通过FlinkCDC同步数据库到Paimon时在Flink Web UI界面发现写入端一直处于忙碌状态,并且Task自动重启了,查看日常日志看到:
Flink UI错误日志
异常信息提示由于最近的checkpoint在完成之前过期导致checkpoint执行失败了,一开始怀疑间隔时间设置过短,然后查看了下 flink-conf.yaml 配置项 execution.checkpointing.interval ,发现间隔时间配置为10秒,遂将其改为5min后重新跑作业,然而发现问题依旧。

在Flink UI界面上查看Checkpoint历史信息,点开FAILED可以在里面跳转到日志界面。
checkpoint日志
在日志界面通过搜索Exception关键字找到错误信息再进行分析,如图:
类型转换错误
发现在数据处理过程中出现类型转换错误,我们需要知道Paimon当时正在处理的数据是属于源库的哪张表以及哪个字段,向前翻看日志可以发现日志记录了表名信息,然后我们拿到表名到源数据库查看该表结构信息。
错误提示"0.0"字符串转为INT时出错,从源表数据上看并没有找到0.0的数据,怀疑是Debezium在字段类型映射上导致的。数据从Debezium流转到Paimon时,我加了一行日志打印具体的事件内容,如图:
打印日志

更新程序重跑作业,在日志中拷贝出JSON格式事件内容,发现了0.0的数值,其对应的字段描述如图:
字段类型
我们遇到的0.0实际上在SqlServer中的字段类型为:Numeric类型,Debezium官方对Numeric类型的映射为:
SqlServer类型映射
可以看到Paimon接收到的事件数据确实是按官方所述的那样,然而在源库上的表看到的数值都是整数类型,而且Paimon对SqlServer的字段类型映射是将Numeric映射为INT,所以就出现了那个类型转换错误。

解决方法

修改Paimon中SqlServer字段类型映射关系,可以将Numeric改为映射成浮点类型。修改Debezium的字段类型映射关系可能不是好的选择,可能会引起其他的问题。
重新编译打包部署后问题解决。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值