Hi all,

I've updated the KIP. If you have any comments or feedback, please feel free to 
share. Thank you!
<https://cwiki.apache.org/confluence/x/QAq9F>

Best Regards,
Jiunn-Yang

> Sophie Blee-Goldman <sop...@responsive.dev> 於 2025年4月26日 下午1:34 寫道:
> 
> That's a good point about the DEFAULT enum, it would essentially be
> redundant with REMAIN_IN_GROUP since this is the default behavior for
> Streams regardless of whether it's dynamic or static. We only had DEFAULT
> for the plain consumer client because the behavior differed for these two
> cases. So +1 on the enum options being only LEAVE_GROUP and REMAIN_IN_GROUP
> for Streams
> 
> On Fri, Apr 25, 2025 at 9:24 PM Chia-Ping Tsai <chia7...@gmail.com> wrote:
> 
>> hi all,
>> 
>> It seems the consensus is to create CloseOptions for streams, and currently
>> it is almost identical to the CloseOptions for consumers.
>> 
>> I'm +1 to this idea, as streams may have different behavior in the future.
>> Additionally, I want to raise a question that might highlight a difference
>> even now :)
>> 
>> chia_0:
>> 
>> Does the CloseOptions for streams need a DEFAULT option if we want to use
>> an enum? The use case for streams is whether to remove static members or
>> not, and therefore it seems we can simplify the enum with only LEAVE_GROUP
>> and REMAIN_IN_GROUP.
>> 
>> Best,
>> Chia-Ping
>> 
>> 
>> TengYao Chi <kiting...@gmail.com> 於 2025年4月26日 週六 下午12:17寫道:
>> 
>>> Hi Jiunn-Yang
>>> 
>>> You could copy the code example from KIP-1092, but adjust it to fit the
>>> Streams style (e.g. javadoc, definition).
>>> It would be easier since these examples have been discussed previously.
>>> 
>>> Best,
>>> TengYao
>>> 
>>> 
>>> 黃竣陽 <s7133...@gmail.com> 於 2025年4月26日 週六 上午11:34寫道:
>>> 
>>>> Hello Sophie, Mathias,
>>>> 
>>>> Thanks for your comments.
>>>> 
>>>> I fully agree with option 2 and will proceed to update the KIP to
>> reflect
>>>> this choice.
>>>> 
>>>> Best Regards,
>>>> Jiunn-Yang
>>>> 
>>>>> Sophie Blee-Goldman <sop...@responsive.dev> 於 2025年4月26日 清晨6:48 寫道:
>>>>> 
>>>>> Ah thanks Matthias, I was looking at the wrong code earlier whoops. I
>>>>> totally agree, the #build static constructor is out of place, as I
>> said
>>>>> originally I believe we should follow the same pattern we used in
>>>> KIP-1092
>>>>> 
>>>>> As for whether to literally reuse the same CloseOptions object, I'm
>>>> against
>>>>> that, I think Streams should have its own. Streams has different
>>> default
>>>>> behavior and we may want to extend the close options with
>>>> streams-specific
>>>>> stuff at some point in the future.
>>>>> 
>>>>> So I'm definitely in favor of option 2. I also think that if we're
>>> going
>>>> to
>>>>> deprecate the entire class and add a new one, then we may as well
>> also
>>>> use
>>>>> an enum instead of a boolean for leaveGroup.
>>>>> 
>>>>> On Fri, Apr 25, 2025 at 3:39 PM Matthias J. Sax <mj...@apache.org>
>>>> wrote:
>>>>> 
>>>>>> Thanks for the KIP.
>>>>>> 
>>>>>> Using `build()` method in not common in the current API. Why do we
>>> want
>>>>>> to diverge?
>>>>>> 
>>>>>> It seems more aligned to the current API design to replace `build()`
>>>>>> with two static builder methods:
>>>>>> 
>>>>>> - withTimeout(Duration)
>>>>>> - withLeaveGropu(boolean)
>>>>>> 
>>>>>> (Just for to illustrate. I would not use these two method names
>>> though.)
>>>>>> 
>>>>>> The problem I see is, misalignment to the usual naming patterns and
>>>>>> KIP-1092
>>>>>> (
>>>>>> 
>>>> 
>>> 
>> https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=321719077
>>>>>> )
>>>>>> 
>>>>>> We usually use `withXxx(...)` for the non-static method, and other
>>> names
>>>>>> for the static entry point method. However, the existing
>>> `CloseOptions`
>>>>>> already uses `timeout(During)` and `leaveGroup(boolean)` so we
>> cannot
>>>>>> just change it.
>>>>>> 
>>>>>> 
>>>>>> I think there is two options:
>>>>>> 
>>>>>> (1) We could just re-use the `CloseOptions` class from KIP-1092, and
>>>>>> deprecate `KafkaStreams.close(KakfaStreams.ClosOptions)` in favor
>> of a
>>>>>> new one, which accepts the KIP-1092 `CloseOptions` object -- I want
>> to
>>>>>> point out, that this idea was discussed on KIP-1092 already, but it
>>> was
>>>>>> controversial.
>>>>>> 
>>>>>> (2) If we don't want to do it, we can also deprecate the entire
>>> existing
>>>>>> (nested) class, `KafkaStreams.CloseOptions`, and create a new (top
>>>>>> level) `o.a.k.streams.CloseOptions` and design it in a way that
>> aligns
>>>>>> to common naming patterns.
>>>>>> 
>>>>>> public class CloseOptions {
>>>>>>  public static CloseOptions timeout(Duration);
>>>>>>  public static CloseOptions leaveGroup(boolean);
>>>>>> 
>>>>>>  public CloseOptions withTimeout(Duration);
>>>>>>  public CloseOptions withLeaveGroup(boolean);
>>>>>> }
>>>>>> 
>>>>>> (Or similar names.)
>>>>>> 
>>>>>> Btw: Instead of using a `boolean` it could also be beneficial to use
>>> an
>>>>>> enum a la KIP-1092 with valued DEFAULT, LEAVE_GROUP,
>> REMAIN_IN_GROUP?
>>>>>> 
>>>>>> 
>>>>>> Thoughts?
>>>>>> 
>>>>>> 
>>>>>> -Matthias
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> On 4/25/25 3:05 PM, Sophie Blee-Goldman wrote:
>>>>>>> Thanks! I personally think this looks good, as we really just
>> wanted
>>> to
>>>>>>> remove the public constructor, but I'll ping Matthias to take a
>> look
>>>> and
>>>>>>> make sure this is in line with his understanding
>>>>>>> 
>>>>>>> If yes I think we can move to a vote
>>>>>>> 
>>>>>>> On Fri, Apr 25, 2025 at 5:34 AM 黃竣陽 <s7133...@gmail.com> wrote:
>>>>>>> 
>>>>>>>> Hello Sophie,
>>>>>>>> 
>>>>>>>> Thanks for your comments,
>>>>>>>> 
>>>>>>>> I’ve updated the KIP to add a new static `build()` method for
>>>>>> initializing
>>>>>>>> the CloseOptions object.
>>>>>>>> The public constructor has been deprecated, while the existing
>>>>>>>> fluent-style methods remain unchanged.
>>>>>>>> 
>>>>>>>> Best Regards,
>>>>>>>> Jiunn-Yang
>>>>>>>> 
>>>>>>>>> Sophie Blee-Goldman <sop...@responsive.dev> 於 2025年4月25日 清晨5:15
>>> 寫道:
>>>>>>>>> 
>>>>>>>>> Thanks for the KIP!
>>>>>>>>> 
>>>>>>>>> This looks good but a few comments about the API: I think we
>>> actually
>>>>>>>> want
>>>>>>>>> more of a fluent pattern than a literal builder pattern, to be
>>>>>> consistent
>>>>>>>>> with other APIs in Kafka Streams. You can criticize Matthias for
>>>> saying
>>>>>>>>> "builder pattern" in the ticket, he means a fluent style :P
>>>>>>>>> 
>>>>>>>>> In other words instead of introducing a CloseOptions.Builder we
>>>> should
>>>>>>>> just
>>>>>>>>> have a static constructor and non-static `.withParam()` methods
>> for
>>>> all
>>>>>>>>> optional parameters. You can actually take a look at the design
>> of
>>>> the
>>>>>>>>> CloseOptions class we just added for the consumer client, which
>> we
>>>>>>>> designed
>>>>>>>>> specifically to match the style we wanted the Streams
>> CloseOptions
>>> to
>>>>>>>> have.
>>>>>>>>> The parameters are a bit different but the API format should be
>> the
>>>>>> same
>>>>>>>>> 
>>>>>>>>> Cheers,
>>>>>>>>> Sophie
>>>>>>>>> 
>>>>>>>>> On Fri, Apr 11, 2025 at 6:43 PM 黃竣陽 <s7133...@gmail.com> wrote:
>>>>>>>>> 
>>>>>>>>>> Hello everyone,
>>>>>>>>>> 
>>>>>>>>>> I would like to start a discussion on KIP-1153: Kafka Streams
>>>>>>>>>> `CloseOptions` should not have a public constructor
>>>>>>>>>> <https://cwiki.apache.org/confluence/x/QAq9F>
>>>>>>>>>> 
>>>>>>>>>> This proposal aims to improve KafkaStreams.CloseOptions by
>>> adopting
>>>> a
>>>>>>>>>> builder pattern to ensure API consistency.
>>>>>>>>>> 
>>>>>>>>>> Best Regards,
>>>>>>>>>> Jiunn-Yang
>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>>> 
>>>> 
>>>> 
>>> 
>> 

Reply via email to