2015-09-29 3:36 GMT+02:00 Jiangjie Qin <j...@linkedin.com.invalid>:

> Thanks for the writeup. I also think having a specific protocol for
> client-broker version negotiation is better.
>
> I'm wondering is it better to let the broker to decide the version to use?
> It might have some value If brokers have preference for a particular
> version.
>

I dont think we want to put the decision on what common protocol version to
use
on the broker side. A broker only needs to support the APIs and versions it
provides,
while a client can support many more versions (older and newer than the
current
broker's), so I strongly suggest that this logic should be on the client
side.
This is also important for the Kafka eco-system where various Kafka tools
and clients
will end up in various OS distros - these clients will need to support a
broad range
of broker versions to be of value as a (lets say Ubuntu) package.

Client-side decision also allows for client-side workarounds for broker
issues.



Using a global version is a good approach. For the client-broker
> negotiation, I am thinking about something like:
>
> ProtocolSyncRequest => ClientType [ProtocolVersion]
>     ClientType => int8
>     ProtocolVersion => int16
>
> ProtocolSyncResponse => PreferredVersion
>     PreferredVersion => int16
>
> Thanks,
>
> Jiangjie (Becket) Qin
>
> On Mon, Sep 28, 2015 at 11:59 AM, Jun Rao <j...@confluent.io> wrote:
>
> > I agree with Ewen that having the keys explicitly specified in the
> response
> > is better.
> >
> > In addition to the supported protocol version, there are other
> interesting
> > metadata at the broker level that could be of interest to things like
> admin
> > tools (e.g., used disk space, remaining disk space, etc). I am wondering
> if
> > we should separate those into different requests. For inquiring the
> > protocol version, we can have a separate BrokerProtocolRequest. The
> > response will just include the broker version and perhaps a list of
> > supported requests and versions?
> >
> > As for sending an empty response for unrecognized requests, do you how is
> > that handled in other similar systems?
> >
> > Thanks,
> >
> > Jun
> >
> > On Mon, Sep 28, 2015 at 10:47 AM, Jason Gustafson <ja...@confluent.io>
> > wrote:
> >
> > > Having the version API can make clients more robust, so I'm in favor.
> One
> > > note on the addition of the "rack" field. Since this is a
> broker-specific
> > > setting, the client would have to query BrokerMetadata for every new
> > broker
> > > it connects to (unless we also expose rack in TopicMetadata). This is
> > also
> > > kind of unfortunate for admin utilities leveraging this API. It might
> be
> > > more convenient to allow this API to return broker metadata for the
> full
> > > cluster, assuming all of it could be made available in Zookeeper.
> > >
> > > As for using the empty response to indicate an incompatible API, it
> seems
> > > like that could work. I think some of the clients might catch response
> > > parsing exceptions and retry anyway, but that's no worse than retrying
> > > because of a disconnect in the same case.
> > >
> > > -Jason
> > >
> > > On Fri, Sep 25, 2015 at 9:34 PM, Ewen Cheslack-Postava <
> > e...@confluent.io>
> > > wrote:
> > >
> > > > The basic functionality is definitely useful here. I'm generally in
> > favor
> > > > of exposing some info about broker versions to clients.
> > > >
> > > > I'd prefer to keep the key/values explicit. Making them extensible
> > > > string/string pairs is good for avoiding unnecessary version changes
> in
> > > the
> > > > protocol, but I think we should explicitly define the valid key/value
> > > > formats in each version of the protocol. New keys can safely be
> > ignored,
> > > > but actually specifying the format of the values is important if we
> > ever
> > > > need to evolve those formats.
> > > >
> > > > I like some of the examples you've provided for returned key/value
> > pairs
> > > > and I think we should provide some of them even when the values
> should
> > be
> > > > obvious from the broker version.
> > > >
> > > > * broker.version - are we definitely standardizing on this versioning
> > > > format? 4 digits, with each level indicating the intuitive levels of
> > > > compatibility? Is there any chance we'll have a 0.10.0.0? This might
> > seem
> > > > like a trivial consideration, but after fighting versioning in
> > different
> > > > packaging systems, I'm a bit more sensitive to the annoying effects
> > that
> > > > not considering this carefully can have. We're at a particularly
> > > sensitive
> > > > point as we hit .9 -> .10 or .9 -> 1.0 (!!!!).
> > > > * supported.compression.codecs - nit, but I'd like to figure out a
> good
> > > way
> > > > to keep these as close to the actual config name as possible. in this
> > > case,
> > > > the setting is compression.codec, so just "compression.codecs" seems
> > > ideal
> > > > to me.
> > > > * rack: I think there's a ton of demand for something like this, but
> > I'd
> > > > really like to think through it more before exposing anything. "rack"
> > is
> > > > *very* specific to a deployment scenario. I think we're comfortable
> > > > adapting the terminology, but the meaning can change drastically,
> even
> > > > under seemingly similar deployments. For example, if you deploy in
> EC2,
> > > you
> > > > might create instances in multiple AZs. Within an AZ, you might
> > consider
> > > > all the nodes on the same "rack". But there are also placement groups
> > > > within each AZ that provide better guarantees on network performance.
> > Are
> > > > any nodes in the same AZ considered on the same rack or do you need
> > > special
> > > > guarantees to be on the same "rack". In general, I don't think
> there's
> > a
> > > > generic "rack" identifier we can expose -- we'll need to do something
> > > > specialized depending on different environments. This is a case where
> > > > extensibility in the format is probably really useful.
> > > > * Properties like supported.compression.codecs can presumably be
> > > determined
> > > > just via the broker version. Is there a good reason for including
> them?
> > > > Perhaps explicit info >> implicit info?
> > > > * "All existing clients should be able to handle this gracefully
> > without
> > > > any alterations to the code" - which clients does this refer to? For
> > > > example, will the Java clients continue to behave the same way they
> do
> > > > today? I'm curious because empty responses seem *very* different from
> > > > closing connections.
> > > >
> > > >
> > > > -Ewen
> > > >
> > > > On Fri, Sep 25, 2015 at 2:53 PM, Magnus Edenhill <mag...@edenhill.se
> >
> > > > wrote:
> > > >
> > > > > Good evening,
> > > > >
> > > > > KIP-35 was created to address current and future broker-client
> > > > > compatibility.
> > > > >
> > > > >
> > > > >
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-35+-+Retrieving+protocol+version
> > > > >
> > > > > Summary:
> > > > >  * allow clients to retrieve the broker's protocol version
> > > > >  * make broker handle unknown protocol requests gracefully
> > > > >
> > > > > Feedback and comments welcome!
> > > > >
> > > > > Regards,
> > > > > Magnus
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Thanks,
> > > > Ewen
> > > >
> > >
> >
>

Reply via email to