I'm leaning towards option 3, although option 2 is a reasonable tradeoff
between the two.

Overall I'm leaning towards option 3 because:

   1. As Guozhang has said we are failing "fast enough" with an Exception
   from the first rebalance.
   2. Less complexity/maintenance cost by not having a transient network
   client
   3. Ideally, this check should be on the AdminClient itself but adding
   such a check creates "scope creep" for this KIP.

IMHO the combination of these reasons makes option 3 my preferred approach.

Thanks,
Bill

On Tue, Nov 7, 2017 at 12:48 PM, Guozhang Wang <wangg...@gmail.com> wrote:

> Here is what I'm thinking about this trade-off: we want to fail fast when
> brokers do not yet support the requested API version, with the cost that we
> need to do this one-time thing with an expensed NetworkClient plus a bit
> longer starting up latency. Here are a few different options:
>
> 1) we ask all the brokers: this is one extreme of the trade-off, we still
> need to handle UnsupportedApiVersionsException since brokers can
> downgrade.
> 2) we ask a random broker: this is what we did, and a bit weaker than 1)
> but saves on latency.
> 3) we do not ask anyone: this is the other extreme of the trade-off.
>
> To me I think 1) is an overkill, so I did not include that in my proposals.
> Between 2) and 3) I'm slightly preferring 3) since even under this case we
> are sort of failing fast because we will throw the exception at the first
> rebalance, but I can still see the value of option 2). Ideally we can have
> some APIs from AdminClient to check API versions but this does not exist
> today and I do not want to drag too long with growing scope on this KIP, so
> the current proposal's implementation uses expendable Network which is a
> bit fuzzy.
>
>
> Guozhang
>
>
> On Tue, Nov 7, 2017 at 2:07 AM, Matthias J. Sax <matth...@confluent.io>
> wrote:
>
> > I would prefer to keep the current check. We could even improve it, and
> > do the check to more than one brokers (even all provided
> > bootstrap.servers) or some random servers after we got all meta data
> > about the cluster.
> >
> >
> > -Matthias
> >
> > On 11/7/17 1:01 AM, Guozhang Wang wrote:
> > > Hello folks,
> > >
> > > One update I'd like to propose regarding "compatibility checking":
> > > currently we create a single StreamsKafkaClient at the beginning to
> issue
> > > an ApiVersionsRequest to a random broker and then check on its
> versions,
> > > and fail if it does not satisfy the version (0.10.1+ without EOS,
> 0.11.0
> > > with EOS); after this check we throw this client away. My original plan
> > is
> > > to replace this logic with the NetworkClient's own apiVersions, but
> after
> > > some digging while working on the PR I found that exposing this
> > apiVersions
> > > variable from NetworkClient through AdminClient is not very straight
> > > forward, plus it would need an API change on the AdminClient itself as
> > well
> > > to expose the versions information.
> > >
> > > On the other hand, this one-time compatibility checking's benefit may
> be
> > > not significant: 1) it asks a random broker upon starting up, and hence
> > > does not guarantee all broker's support the corresponding API versions
> at
> > > that time; 2) brokers can still be upgraded / downgraded after the
> > streams
> > > app is up and running, and hence we still need to handle
> > > UnsupportedVersionExceptions thrown from the producer / consumer /
> admin
> > > client during the runtime anyways.
> > >
> > > So I'd like to propose two options in this KIP:
> > >
> > > 1) we remove this one-time compatibility check on Streams starting up
> in
> > > this KIP, and solely rely on handling producer / consumer / admin
> > client's
> > > API UnsupportedVersionException throwable exceptions. Please share your
> > > thoughts about this.
> > >
> > > 2) we create a one-time NetworkClient upon starting up, send the
> > > ApiVersionsRequest and get the response and do the checking; after that
> > > throw this client away.
> > >
> > > Please let me know what do you think. Thanks!
> > >
> > >
> > > Guozhang
> > >
> > >
> > > On Mon, Nov 6, 2017 at 7:56 AM, Matthias J. Sax <matth...@confluent.io
> >
> > > wrote:
> > >
> > >> Thanks for the update and clarification.
> > >>
> > >> Sounds good to me :)
> > >>
> > >>
> > >> -Matthias
> > >>
> > >>
> > >>
> > >> On 11/6/17 12:16 AM, Guozhang Wang wrote:
> > >>> Thanks Matthias,
> > >>>
> > >>> 1) Updated the KIP page to include KAFKA-6126.
> > >>> 2) For passing configs, I agree, will make a pass over the existing
> > >> configs
> > >>> passed to StreamsKafkaClient and update the wiki page accordingly, to
> > >>> capture all changes that would happen for the replacement in this
> > single
> > >>> KIP.
> > >>> 3) For internal topic purging, I'm not sure if we need to include
> this
> > >> as a
> > >>> public change since internal topics are meant for abstracted away
> from
> > >> the
> > >>> Streams users; they should not leverage such internal topics
> elsewhere
> > >>> themselves. The only thing I can think of is for Kafka operators this
> > >> would
> > >>> mean that such internal topics would be largely reduced in their
> > >> footprint,
> > >>> but that would not be needed in the KIP as well.
> > >>>
> > >>>
> > >>> Guozhang
> > >>>
> > >>>
> > >>> On Sat, Nov 4, 2017 at 9:00 AM, Matthias J. Sax <
> matth...@confluent.io
> > >
> > >>> wrote:
> > >>>
> > >>>> I like this KIP. Can you also link to
> > >>>> https://issues.apache.org/jira/browse/KAFKA-6126 in the KIP?
> > >>>>
> > >>>> What I am wondering though: if we start to partially (ie, step by
> > step)
> > >>>> replace the existing StreamsKafkaClient with Java AdminClient, don't
> > we
> > >>>> need more KIPs? For example, if we use purge-api for internal
> topics,
> > it
> > >>>> seems like a change that requires a KIP. Similar for passing configs
> > --
> > >>>> the old client might have different config than the old client? Can
> we
> > >>>> double check this?
> > >>>>
> > >>>> Thus, it might make sense to replace the old client with the new one
> > in
> > >>>> one shot.
> > >>>>
> > >>>>
> > >>>> -Matthias
> > >>>>
> > >>>> On 11/4/17 4:01 AM, Ted Yu wrote:
> > >>>>> Looks good overall.
> > >>>>>
> > >>>>> bq. the creation within StreamsPartitionAssignor
> > >>>>>
> > >>>>> Typo above: should be StreamPartitionAssignor
> > >>>>>
> > >>>>> On Fri, Nov 3, 2017 at 4:49 PM, Guozhang Wang <wangg...@gmail.com>
> > >>>> wrote:
> > >>>>>
> > >>>>>> Hello folks,
> > >>>>>>
> > >>>>>> I have filed a new KIP on adding AdminClient into Streams for
> > internal
> > >>>>>> topic management.
> > >>>>>>
> > >>>>>> Looking for feedback on
> > >>>>>>
> > >>>>>> *https://cwiki.apache.org/confluence/display/KAFKA/KIP-
> > >>>>>> 220%3A+Add+AdminClient+into+Kafka+Streams%27+ClientSupplier
> > >>>>>> <https://cwiki.apache.org/confluence/display/KAFKA/KIP-
> > >>>>>> 220%3A+Add+AdminClient+into+Kafka+Streams%27+ClientSupplier>*
> > >>>>>>
> > >>>>>> --
> > >>>>>> -- Guozhang
> > >>>>>>
> > >>>>>
> > >>>>
> > >>>>
> > >>>
> > >>>
> > >>
> > >>
> > >
> > >
> >
> >
>
>
> --
> -- Guozhang
>

Reply via email to