Very good points, Todd, totally agree.

2015-09-30 1:04 GMT+02:00 Todd Palino <tpal...@gmail.com>:

> We should also consider what else should be negotiated between the broker
> and the client as this comes together. The version is definitely first, but
> there are other things, such as the max message size, that should not need
> to be replicated on both the broker and the client. Granted, max message
> size has per-topic overrides as well, but that should also be considered
> (possibly as an addition to the topic metadata response).
>
> Ideally you never want a requirement that is enforced by the broker to be a
> surprise to the client, whether that's a supported version or a
> configuration parameter. The client should not have to know it in advance
> (except for the most basic of connection parameters), and even if it does
> have it as a configuration option, it should be able to know before it even
> starts running that what it has configured is in conflict with the server.
>
> -Todd
>
>
> On Tue, Sep 29, 2015 at 11:08 AM, Mayuresh Gharat <
> gharatmayures...@gmail.com> wrote:
>
> > Right. But there should be a max old version that the broker should
> support
> > to avoid these incompatibility issues.
> > For example, if the broker is at version X, it should be able to support
> > the versions (clients and interbroker) till X-2. In case we have brokers
> > and clients older than that it can send a response warning them to
> upgrade
> > till X-2 minimum.
> > The backward compatibility limit can be discussed further. This will help
> > for rolling upgrades.
> >
> > Thanks,
> >
> > Mayuresh
> >
> > On Tue, Sep 29, 2015 at 8:25 AM, Grant Henke <ghe...@cloudera.com>
> wrote:
> >
> > > If we create a protocol version negotiation api for clients, can we use
> > it
> > > to replace or improve the ease of upgrades that break inter-broker
> > > messaging?
> > >
> > > Currently upgrades that break the wire protocol take 2 rolling
> restarts.
> > > The first restart we set inter.broker.protocol.version telling all
> > brokers
> > > to communicate on the old version, and then we restart again removing
> the
> > > inter.broker.protocol.version. With this api the brokers could agree
> on a
> > > version to communicate with, and when bounced re-negotiate to the new
> > > version.
> > >
> > >
> > > On Mon, Sep 28, 2015 at 10:26 PM, Mayuresh Gharat <
> > > gharatmayures...@gmail.com> wrote:
> > >
> > > > Nice write-up.
> > > >
> > > > Just had a question, instead of returning an empty response back to
> the
> > > > client, would it be better for the broker to return a response that
> > gives
> > > > some more info to the client regarding the min version they need to
> > > upgrade
> > > > to in order to communicate with the broker.
> > > >
> > > >
> > > > Thanks,
> > > >
> > > > Mayuresh
> > > >
> > > > On Mon, Sep 28, 2015 at 6:36 PM, Jiangjie Qin
> > <j...@linkedin.com.invalid
> > > >
> > > > wrote:
> > > >
> > > > > 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.
> > > > > 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
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > -Regards,
> > > > Mayuresh R. Gharat
> > > > (862) 250-7125
> > > >
> > >
> > >
> > >
> > > --
> > > Grant Henke
> > > Software Engineer | Cloudera
> > > gr...@cloudera.com | twitter.com/gchenke | linkedin.com/in/granthenke
> > >
> >
> >
> >
> > --
> > -Regards,
> > Mayuresh R. Gharat
> > (862) 250-7125
> >
>

Reply via email to