Moving discussion on VOTE thread here:

Ismael asked:

> Adding a Builder seems unrelated to this change. Do we need it? Given the
> imminent KIP deadline, I'd keep it simple and just have the constructor
> with just the name parameter.

If we want the flexibility that the builder provides we would need to add
three constructors:
- no partitions/replicas
- just partitions
- just replicas

I see good use cases for the first two - the third (just replicas) seems
less necessary and complicates the API a bit (you have to differentiate
NewTopic(int) with NewTopic(short) or something like that). If we're happy
with a KIP that covers just the first two then I can remove the builder to
simplify things. Otherwise, I think the builder is an important addition.

Thoughts?

On Fri, May 3, 2019 at 11:43 AM Randall Hauch <rha...@gmail.com> wrote:

> I personally like those extra methods, rather than relying upon the generic
> properties. But I'm fine if others think they should be removed. I'm also
> fine with not deprecating the Connect version of the builder.
>
> On Fri, May 3, 2019 at 11:27 AM Almog Gavra <al...@confluent.io> wrote:
>
> > Ack. KIP updated :) Perhaps instead of deprecating the Connect builder,
> > then, we can indeed just subclass it and move some of the less common
> build
> > methods (e.g. uncleanLeaderElection) there.
> >
> > On Fri, May 3, 2019 at 11:20 AM Randall Hauch <rha...@gmail.com> wrote:
> >
> > > Thanks for updating, Almog. I have a few suggestions specific to the
> > > builder:
> > >
> > > 1. The AK pattern for builder classes that are nested is to name the
> > class
> > > "Builder" and to make it publicly visible. We should follow that
> pattern
> > > here, too.
> > > 2. The builder's private constructor makes it impossible to subclass,
> > > should we ever want to do that (e.g, in Connect). If we make it
> protected
> > > or public, then subclassing is easier.
> > >
> > > On Thu, May 2, 2019 at 9:44 AM Almog Gavra <al...@confluent.io> wrote:
> > >
> > > > Thanks for the input Randall. I'm happy adding it natively to
> NewTopic
> > > > instead of introducing more verbosity - updating the KIP to reflect
> > this
> > > > now.
> > > >
> > > > On Thu, May 2, 2019 at 9:28 AM Randall Hauch <rha...@gmail.com>
> wrote:
> > > >
> > > > > I wrote the `NewTopicBuilder` in Connect, and it was simply a
> > > convenience
> > > > > to more easily set some of the frequently-used properties and the #
> > of
> > > > > partitions and replicas for the new topic in the same way. An
> example
> > > is:
> > > > >
> > > > >     NewTopic topicDescription = TopicAdmin.defineTopic(topic).
> > > > >                 compacted().
> > > > >                 partitions(1).
> > > > >                 replicationFactor(3).
> > > > >                 build();
> > > > >
> > > > > Arguably it should have been added to clients from the beginning.
> So
> > > I'm
> > > > > fine with that being moved to clients, as long as Connect is
> changed
> > to
> > > > use
> > > > > the new clients class. However, even though Connect's
> > `NewTopicBuilder`
> > > > is
> > > > > in the runtime and technically not part of the public API, things
> > like
> > > > this
> > > > > still tend to get reused elsewhere. Let's keep the Connect
> > > > > `NewTopicBuilder` but deprecate it and have it extend the one in
> > > clients.
> > > > > The `TopicAdmin` class in Connect can then refer to the new one in
> > > > clients.
> > > > >
> > > > > The KIP now talks about having a constructor for the builder:
> > > > >
> > > > >     NewTopic myTopic = new
> > > > >
> > > > >
> > > >
> > >
> >
> NewTopicBuilder(name).compacted().partitions(1).replicationFactor(3).build();
> > > > >
> > > > > How about adding the builder to the NewTopic class itself:
> > > > >
> > > > >     NewTopic myTopic =
> > > > >
> > > > >
> > > >
> > >
> >
> NewTopic.build(name).compacted().partitions(1).replicationFactor(3).build();
> > > > >
> > > > > This is a bit shorter, a bit easier to read (no "new New..."), and
> > more
> > > > > discoverable since anyone looking at the NewTopic source or JavaDoc
> > > will
> > > > > maybe notice it.
> > > > >
> > > > > Randall
> > > > >
> > > > >
> > > > > On Thu, May 2, 2019 at 8:56 AM Almog Gavra <al...@confluent.io>
> > wrote:
> > > > >
> > > > > > Sure thing, added more detail to the KIP! To clarify, the plan is
> > to
> > > > move
> > > > > > an existing API from one package to another (NewTopicBuilder
> exists
> > > in
> > > > > the
> > > > > > connect.runtime package) leaving the old in place for
> compatibility
> > > and
> > > > > > deprecating it.
> > > > > >
> > > > > > I'm happy to hear thoughts on whether we should (a) move it to
> the
> > > same
> > > > > > package in a new module so that we don't need to deprecate it or
> > (b)
> > > > take
> > > > > > this opportunity to change any of the APIs.
> > > > > >
> > > > > > On Thu, May 2, 2019 at 8:22 AM Ismael Juma <isma...@gmail.com>
> > > wrote:
> > > > > >
> > > > > > > If you are adding new API, you need to specify it all in the
> KIP.
> > > > > > >
> > > > > > > Ismael
> > > > > > >
> > > > > > > On Thu, May 2, 2019, 8:04 AM Almog Gavra <al...@confluent.io>
> > > wrote:
> > > > > > >
> > > > > > > > I think that sounds reasonable - I updated the KIP and I will
> > > > remove
> > > > > > the
> > > > > > > > constructor that takes in only partitions.
> > > > > > > >
> > > > > > > > On Thu, May 2, 2019 at 4:44 AM Andy Coates <
> a...@confluent.io>
> > > > > wrote:
> > > > > > > >
> > > > > > > > > Rather than adding overloaded constructors, which can lead
> to
> > > API
> > > > > > > bloat,
> > > > > > > > > how about using a builder pattern?
> > > > > > > > >
> > > > > > > > > I see it’s already got some constructor overloading, but we
> > > could
> > > > > > add a
> > > > > > > > > single new constructor that takes just the name, and
> support
> > > > > > everything
> > > > > > > > > else being set via builder methods.
> > > > > > > > >
> > > > > > > > > This would result in a better long term api as the number
> of
> > > > > options
> > > > > > > > > increases.
> > > > > > > > >
> > > > > > > > > Sent from my iPhone
> > > > > > > > >
> > > > > > > > > > On 30 Apr 2019, at 16:28, Almog Gavra <
> al...@confluent.io>
> > > > > wrote:
> > > > > > > > > >
> > > > > > > > > > Hello Everyone,
> > > > > > > > > >
> > > > > > > > > > I'd like to start a discussion on KIP-464:
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-464%3A+Default+Replication+Factor+for+AdminClient%23createTopic
> > > > > > > > > >
> > > > > > > > > > It's about allowing users of the AdminClient to supply
> > only a
> > > > > > > partition
> > > > > > > > > > count and to use the default replication factor
> configured
> > by
> > > > the
> > > > > > > kafka
> > > > > > > > > > cluster. Happy to receive any and all feedback!
> > > > > > > > > >
> > > > > > > > > > Cheers,
> > > > > > > > > > Almog
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>

Reply via email to