Gabriel Giussi created KAFKA-14185:
--------------------------------------

             Summary: Broker allows transactions with generation.id -1 and 
could lead to duplicates
                 Key: KAFKA-14185
                 URL: https://issues.apache.org/jira/browse/KAFKA-14185
             Project: Kafka
          Issue Type: Bug
          Components: controller
    Affects Versions: 2.8.0
            Reporter: Gabriel Giussi


We were incorrectly getting a reference to ConsumerGroupMetadata before the 
first call to poll and holding that reference for the whole lifecycle of the 
consumer/producer pair we were creating. Since that reference was obtained 
before calling poll the consumer wasn't joined yet hence it had a -1 as groupId.

The producer allows to send the offsets using this groupId which can lead to 
duplicates since the fencing won't happen.

The scenario I reproduced locally is the following:
1. Client A starts the consumer and the producer and holds a reference to the 
current groupMetadata wich has [generation.id|http://generation.id/] -1 since 
the consumer didn't join the group yet 
2. Client A joins the group and gets assigned partition 0 and 1
3. Client A polls a message with offset X from partition 1, produces to output 
topic and enters a long gc pause (before calling sendOffsetsToTransation)
4. Client B starts the consumer and the producer, also getting a reference to 
groupMetadata with [generation.id|http://generation.id/] -1 
5. Client B joins the group and gets assigned partition 1
6. Client B polls a message with offset X from partition 1, produces to output 
topic, sends offset with [generation.id|http://generation.id/] -1, and commits 
successfully.
7. Client A comes back and send offsets with 
[generation.id|http://generation.id/] -1 and commits successfully


Original thread in the mailing list: 
https://lists.apache.org/thread/hgmrxvx3f4kjxxcll2jhdb6zpzcvznx3

I think it would be nice to prevent this scenario by rejecting requests with a 
groupId -1, ideally in the broker.



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

Reply via email to