dajac commented on code in PR #16898:
URL: https://github.com/apache/kafka/pull/16898#discussion_r1721533978


##########
group-coordinator/src/main/java/org/apache/kafka/coordinator/group/GroupMetadataManager.java:
##########
@@ -848,26 +844,32 @@ ConsumerGroup consumerGroup(
     ConsumerGroup getOrMaybeCreatePersistedConsumerGroup(
         String groupId,
         boolean createIfNotExists
-    ) throws GroupIdNotFoundException {
+    ) throws IllegalStateException {
         Group group = groups.get(groupId);
 
         if (group == null && !createIfNotExists) {
-            throw new IllegalStateException(String.format("Consumer group %s 
not found.", groupId));
+            throw new IllegalStateException(String.format("Consumer group %s 
not found", groupId));
         }
 
         if (group == null) {
             ConsumerGroup consumerGroup = new ConsumerGroup(snapshotRegistry, 
groupId, metrics);
             groups.put(groupId, consumerGroup);
             metrics.onConsumerGroupStateTransition(null, 
consumerGroup.state());
             return consumerGroup;
+        } else if (group.type() == CONSUMER) {
+            return (ConsumerGroup) group;
+        } else if (group.type() == CLASSIC && ((ClassicGroup) 
group).isSimpleGroup()) {
+            // If the group is a simple classic group, it was automatically 
created to hold committed
+            // offsets if no group existed. Simple classic groups are not 
backed by any records
+            // in the __consumer_offsets topic hence we can safely replace it 
here. Without this,
+            // replaying consumer group records after offset commit records 
would not work.

Review Comment:
   The issue happens when the offset commit records are before the consumer 
group records in the log (e.g. after compaction). When replaying, the following 
happens:
   * OOM#replay will create a simple classic group if the group does not exist.
   * GMM#replay for consumer group records fails because a classic group always 
exists.
   
   This change handle the case in GMM#replay to basically swap the group if the 
group was a simple classic group. 



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to