[
https://issues.apache.org/jira/browse/KAFKA-20167?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18057801#comment-18057801
]
Chia-Ping Tsai commented on KAFKA-20167:
----------------------------------------
We previously discussed the `default` behaviour, but I missed the scenario
described in this ticket.
https://lists.apache.org/thread/9vnqfjc6r9nhllkbx78mo01c7ylft3w2
Since KIP-1153 is related, could we include the DEFAULT option there instead of
starting a new KIP?
https://cwiki.apache.org/confluence/x/QAq9F
> Introduce CloseOptions.DEFAULT for Kafka Streams
> ------------------------------------------------
>
> Key: KAFKA-20167
> URL: https://issues.apache.org/jira/browse/KAFKA-20167
> Project: Kafka
> Issue Type: Task
> Components: streams
> Reporter: Lucas Brutschy
> Priority: Major
> Labels: kip, kip1071
>
> Currently, {{KafkaStreams}} allows users to specify how to close the
> application using {{{}CloseOptions{}}}. The existing options are
> {{LEAVE_GROUP}} and {{{}REMAIN_IN_GROUP{}}}.
> The default behavior (when no options are passed) is {{{}REMAIN_IN_GROUP{}}}.
> However, with the introduction of the Streams Protocol (KIP-1071), the
> behavior of {{REMAIN_IN_GROUP}} has become inconsistent:
> * *Classic Protocol:* The member actually remains in the group.
> * *Streams Protocol (KIP-1071):* The member leaves the group unconditionally
> (as staying in the group for non-static member provides no benefits).
> To resolve this ambiguity and provide a cleaner API for the long term, we
> should introduce a new enum value: {{{}CloseOptions.DEFAULT{}}}. This allows
> the "default" behavior to be adaptive based on the underlying protocol, while
> strictly reserving {{REMAIN_IN_GROUP}} for when the user explicitly requests
> that intent.
> h3. *Proposed Changes*
> *1. Update {{org.apache.kafka.streams.CloseOptions}}*
> Add a new enum value {{{}DEFAULT{}}}.
> *2. Update {{KafkaStreams.close()}} Behavior*
> * *Current:* {{KafkaStreams.close()}} calls
> {{{}close(CloseOptions.REMAIN_IN_GROUP){}}}.
> * *Proposed:* {{KafkaStreams.close()}} calls
> {{{}close(CloseOptions.DEFAULT){}}}.
> *3. Define Logic for {{CloseOptions.DEFAULT}}*
> The new {{DEFAULT}} option should act as a "smart" selection that adheres to
> the best practices of the specific protocol version being used:
> * *If Classic Protocol:* Map to Consumer {{CloseOptions.REMAIN_IN_GROUP}}
> (Preserves legacy behavior).
> * *If Streams Protocol:* Map to Consumer {{CloseOptions.DEFAULT}} (Typically
> leaves the group for dynamic members).
> *4. Redefine {{CloseOptions.REMAIN_IN_GROUP}}*
> Currently, {{REMAIN_IN_GROUP}} is the implicit default. It should become an
> explicit instruction.
> * It should always map to Consumer {{{}CloseOptions.REMAIN_IN_GROUP{}}},
> regardless of the protocol.
> * _Note:_ Even if the Streams protocol currently forces a leave, passing
> this explicit option ensures the intent is passed down to the consumer
> client, rather than being intercepted by Streams logic.
> h3. *Behavior Matrix*
> |*Streams CloseOption*|*Classic Protocol Behavior*|*Streams Protocol
> (KIP-1071) Behavior*|
> |*DEFAULT* (New)|Uses Consumer {{REMAIN}}|Uses Consumer {{DEFAULT}}|
> |*REMAIN_IN_GROUP*|Uses Consumer {{REMAIN}}|Uses Consumer {{REMAIN}}|
> |*LEAVE_GROUP*|Uses Consumer {{LEAVE}}|Uses Consumer {{LEAVE}}|
> h3. *Motivation*
> * *Clarity:* {{REMAIN_IN_GROUP}} should mean exactly what it says. If the
> underlying protocol cannot support it, it is better for the Consumer client
> to handle that rejection/fallback rather than Kafka Streams masking it.
> * *Future Proofing:* By using {{{}DEFAULT{}}}, we allow the "standard" close
> behavior to evolve with future protocols (e.g., KIP-848/1071 evolutions)
> without breaking users who explicitly asked to {{{}REMAIN_IN_GROUP{}}}.
> h3. *Compatibility*
> * This requires a KIP as it changes the {{CloseOptions}} public API.
> * The default behavior for Classic Protocol users remains unchanged (they
> still remain in the group).
> * The default behavior for Streams Protocol users becomes cleaner, mapping
> to the Consumer's default rather than a forced mismatch.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)