Flink报错Can not retract a non-existent record. This should never happen.
通常有以下三种原因,可以按照以下方式进行处理:
问题原因①:由代码中now()导致。因为TopN不支持非确定性的排序字段,now()每次输出的值不同,所以导致Retraction会找不到之前的值。
解决方法:Event Time或源表中一个具有Processing Time属性的字段。
问题原因②: table.exec.state.ttl参数值设置过小。
解决方法:设置过小的TTL参数使用默认配置,或调大参数值。
问题原因③:上游使用CDC Connector,hologres全增量一体源表 并不是一致性的读取,全量数据和增量数据之前是有overlap的,导致处理binlog一开始的 update_before 的时候,会发现该数据在state中不存在。(预计弹内vvr-6.0.2,云上4.0.15修复)
绕过方法:显式配置上table.exec.source.cdc-events-duplicate: true的作业参数,显式增加去重节点保证数据的一致性。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。