Sean Quah created KAFKA-19431: --------------------------------- Summary: Stronger assignment consistency with subscription for consumer groups Key: KAFKA-19431 URL: https://issues.apache.org/jira/browse/KAFKA-19431 Project: Kafka Issue Type: Improvement Components: group-coordinator Reporter: Sean Quah Assignee: Sean Quah
Currently, consumer group assignments are eventually consistent with subscriptions: when a member has unrevoked partitions, it is not allowed to reconcile with the latest target assignment. If a member with unrevoked partitions shrinks its subscription, it may observe assignments from the broker containing topics it is no longer subscribed to. If we wanted to, we could tighten this up at the cost of extra CPU time. Note that it's not feasible to close the gap for regex subscriptions, since there will always be a window when the regex is not yet resolved and we cannot tell whether a topic is part of the subscription. One way to do this would be to update {{CurrentAssignmentBuilder}} and * Add a {{MetadataImage}} and map of resolved regexes * Define the set of subscribed topic uuids as the union of the topic name subscription and resolved regex topic names, like how {{TargetAssignmentBuilder}} does it. ** When the regex is unresolved, we can’t know which topics are part of the subscription. We treat all topics as part of the subscription, so that we do not filter out any topics. * Update the loop over topics in {{computeNextAssignment}} to treat the assigned partitions as an empty set when the topic is not part of the subscription. * Do not advance the member epoch past the target assignment epoch when exiting the {{UNREVOKED_PARTITIONS}} state. * Define a {{computeCurrentAssignment}} method that drops any unsubscribed topics from the member’s current assignment and transitions the member to {{UNREVOKED_PARTITIONS}} if any topics were dropped. * Use computeCurrentAssignment on the other {{UNREVOKED_PARTITIONS}} path. Additionally, if we ever end up with asynchronous assignors (such as client-computed ones), * We add a new flag to {{maybeReconcile}} called {{forceSubscriptionConsistency}}. When the flag is set, we run the {{CurrentAssignmentBuilder}} even when reconciled to the target assignment, since the target assignment can lag behind the group epoch. * Use {{computeCurrentAssignment}} on all {{CurrentAssignmentBuilder}} paths that do not use computeNextAssignment. -- This message was sent by Atlassian Jira (v8.20.10#820010)