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