hi Sophie

I totally understand the concerns regarding internal classes, but they have 
been introduced to the streams module for a while, including 
AutoOffsetResetInternal, JoinWindowsInternal, NamedInternal, and ToInternal. 

Obstructing this KIP solely due to a code taste may not be worthwhile, so I 
have opened https://issues.apache.org/jira/browse/KAFKA-19401 to separate the 
discussion. This a kind of delayed tactic, but it can help the KIP progress :)

Best,
Chia-Ping

On 2025/06/11 23:57:36 Sophie Blee-Goldman wrote:
> Sorry I didn't see this in time but we actually ended up removing the
> CloseOptionsInternal in the consumer version of this API. And I personally
> prefer this approach, especially for such a small and simple class -- feels
> silly to create a new separate class just to hide two methods that don't
> mutate state. Just my two cents.
> 
> Anyways if we want to be consistent with the consumer version then no
> CloseOptionsInternal would be the way to go here
> 
> On Mon, May 19, 2025 at 7:46 AM 黃竣陽 <s7133...@gmail.com> wrote:
> 
> > 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