I did the following test that allowed me to introduce a duplicate message in the output topic.
1. Client A starts the consumer and the producer and holds a reference to the current groupMetadata wich has 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 -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 -1, and commits successfully. 7. Client A comes back and send offsets with generation.id -1 and commits successfully I did this test because it wasn't so clear for me at which moment I had to get the meta and this seems to be a bug to me, since it shouldn't allow sending offsets with generation.id -1. I know that the right way to do it is to ask for the meta after each poll, in that way we always have the generation.id corresponding to the moment where the messages were polled from the broker, but it would be nice to have an error if we send generation.id -1. WDYT? Thanks.