mysql binlog 操作记录发到 kafka topic 中,消息格式是canal json,现通过flink 
sql实时同步写入另一个mysql库。今天发现实时作业抛错说写入mysql时遇到duplicate key error,查了一下发现是kafka 
topic中存在两条相同的消息,即相同主键且都是INSERT操作的消息。请问这种情况有什么办法可以避免作业出错吗?


查了官方文档说要在作业中添加参数 table.exec.source.cdc-events-duplicate 
,相当于是在作业中添加了一个状态算子用于去重,如果这张表不同主键的记录非常多的话,岂不是让其状态很占内存?而作业本身如果配置了状态过期参数,会不会造成无法精准去重?谢谢!


[1] 
https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/connectors/table/formats/canal/#duplicate-change-events

回复