[ 
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)

Reply via email to