You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by "Greg Harris (Jira)" <ji...@apache.org> on 2023/06/09 16:42:00 UTC

[jira] [Resolved] (KAFKA-13932) Replication data loss in some cases

     [ https://issues.apache.org/jira/browse/KAFKA-13932?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Greg Harris resolved KAFKA-13932.
---------------------------------
      Assignee: Greg Harris
    Resolution: Fixed

> Replication data loss in some cases
> -----------------------------------
>
>                 Key: KAFKA-13932
>                 URL: https://issues.apache.org/jira/browse/KAFKA-13932
>             Project: Kafka
>          Issue Type: Bug
>          Components: mirrormaker
>    Affects Versions: 2.8.0
>            Reporter: Bale
>            Assignee: Greg Harris
>            Priority: Major
>             Fix For: 3.5.0, 3.4.1, 3.3.3
>
>         Attachments: connect-mirror-maker.properties, offset1.png, offset2.png, offset3.png
>
>
> *Kafka version: 2.8.0*
> *Replication flow: A -> B*
> *Topic: DL2 -> A.DL2*
>  
> I use mm2 to replicate cluster A data to cluster B. After stop and restart mm2(before restart, the data in source cluster is expired), I found consumer group offset is bigger than topic partiton offset in target cluster which will cause data loss in the mirror topic.
>  
> *[Steps]*
> 1. Start mm2 with the attachment: connect-mirror-maker.properties.
> 2.Create topic DL2, push 5 messages and consume with group g1.  Offset info of DL2 and A.DL2:please see attachment offset1.png
> 3.Stop mm2 and *push 5 messages* to the topic DL2.  Offset info of DL2 and A.DL2: please see attachment offset2.png
> 4. After 1 hour, the data of topic DL2 is expired.
> 5.Restart mm2 and sync consumer group offset, found the consumer group offset is bigger than topic partiton offset. Offset info of DL2 and A.DL2: please see attachment offset3.png
>  
> *[Comments]*
> In the method translateDownstream of OffsetSyncStore class, I found use the latest upstream consumer group offset and the latest offset-sync topic record's downstream offset to caculate the downstream offset:
>   long upstreamStep = upstreamOffset - offsetSync.get().upstreamOffset();
>   return OptionalLong.of(offsetSync.get().downstreamOffset() + upstreamStep);
>  
> If there is data is consumed and deleted in source cluster,but isn't replicated to target cluster , the downstream offset will bigger than topic partiton offset after consumer group offset synced to target cluster (the target cluster topic  has not active consumer). 
>  
> In the method syncGroupOffset of MirrorCheckpointTask class, there is no check for consumer group offset and topic partiton offset.
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)