是的,从ck恢复会导致数据重复,因为ck之前已经提交的数据会在恢复后再次写入Doris。
当Flink在执行过程中的Sink Doris挂掉,从CK(Checkpoint)恢复时,可能会导致数据重复,以下是详细的原因和解决方案:
1、原因分析

Flink的Checkpoint机制:Flink通过定期保存状态快照(Checkpoint)来确保数据的一致性,当Sink Doris挂掉时,Flink可以从最近的Checkpoint恢复,继续处理未完成的任务。
Sink Doris挂掉:Sink Doris是Flink的数据输出组件,负责将处理后的数据写入Doris数据库,当Sink Doris挂掉时,Flink无法将数据写入Doris,可能导致数据丢失。
从CK恢复:当Sink Doris挂掉后,Flink可以从最近的Checkpoint恢复,继续处理未完成的任务,这意味着Flink会重新发送之前已经处理过的数据到Sink Doris。
2、数据重复问题
当Flink从CK恢复并重新发送数据到Sink Doris时,可能会遇到以下两种情况导致数据重复:
Sink Doris没有正确处理之前的失败任务,导致重复写入数据。
Flink在恢复过程中,重复发送了之前已经处理过的数据。

3、解决方案
优化Sink Doris的处理逻辑:确保Sink Doris能够正确处理之前的失败任务,避免重复写入数据,可以通过以下方式实现:
使用幂等操作:确保每次写入数据的操作都是幂等的,即使多次执行也不会改变数据。
使用唯一键约束:在Doris数据库中添加唯一键约束,确保每条数据的唯一性。
优化Flink的Checkpoint策略:减少Checkpoint的频率,降低数据重复的风险,可以通过以下方式实现:
调整Checkpoint间隔时间:根据实际业务需求和系统性能,合理设置Checkpoint间隔时间。
调整Checkpoint数量:根据实际业务需求和系统性能,合理设置Checkpoint数量。
