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