Hi all,

I’d like to manually bump this thread. If there’s no further feedback, 
I’ll start the vote tomorrow.

Best Regards,
Jiunn-Yang

> 黃竣陽 <s7133...@gmail.com> 於 2025年5月8日 晚上8:35 寫道:
> 
> Hi all,
> 
> Thanks for all the feedback. I’ve updated the KIP and introduced a 
> CloseOptionsInternal class that provides a getter method.
> 
> Best Regards,
> Jiunn-Yang
> 
>> Chia-Ping Tsai <chia7...@gmail.com> 於 2025年5月8日 下午1:55 寫道:
>> 
>>> One more nit: we should remove the getters. There are useless. -- In
>> Kafka Streams, we follow the pattern to have a (non-public) sub-class
>> `CloseOptionsInternal` which would add the necessary getters KS runtime
>> needs.
>> 
>> IIRC, we had a similar discussion regarding "internal" classes previously.
>> To avoid bikeshedding, I'd like to emphasize the importance of code
>> consistency for code style. Therefore, I'm +1 on using CloseOptionsInternal
>> in the streams module.
>> 
>> If we want to change the code style for the streams module, it would be
>> beneficial to have a separate KIP for that.
>> 
>> Best,
>> Chia-Ping
>> 
>> 
>> 
>> Matthias J. Sax <mj...@apache.org> 於 2025年5月8日 週四 下午12:02寫道:
>> 
>>> Thanks for updating the KIP.
>>> 
>>> One more nit: we should remove the getters. There are useless. -- In
>>> Kafka Streams, we follow the pattern to have a (non-public) sub-class
>>> `CloseOptionsInternal` which would add the necessary getters KS runtime
>>> needs.
>>> 
>>> Cf
>>> 
>>> https://github.com/apache/kafka/blob/trunk/streams/src/main/java/org/apache/kafka/streams/internals/AutoOffsetResetInternal.java
>>> that we added recently to complement the public
>>> 
>>> https://github.com/apache/kafka/blob/trunk/streams/src/main/java/org/apache/kafka/streams/AutoOffsetReset.java
>>> 
>>> 
>>> -Matthias
>>> 
>>> On 5/6/25 6:26 PM, Sophie Blee-Goldman wrote:
>>>> Thanks for the update! I think this is looking good now, my only feedback
>>>> would be to update the KIP title as well to reflect these latest changes.
>>>> Feel free to pick one yourself but if you want a suggestion, maybe
>>>> something like  "Redo Kafka Streams CloseOptions in fluent style" or
>>>> similar.
>>>> 
>>>> Let's see if Matthias has any other feedback on the proposal but
>>> otherwise
>>>> we should be ready to move to a vote
>>>> 
>>>> On Mon, May 5, 2025 at 4:33 AM 黃竣陽 <s7133...@gmail.com> wrote:
>>>> 
>>>>> 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