Good summary!

Some comments inline:


2016-03-11 22:59 GMT+01:00 Ashish Singh <asi...@cloudera.com>:

> Sounds like we are mostly in agreement. Following are the key points.
>
>    1. Every time a protocol version changes, for any request/response,
>    broker version, ApiVersion, will be bumped up.
>

Maybe clarify that the protocol version (=broker version) bump is implicit
by a release (formal/final or interim).



>    2. Protocol documentation will be versioned with broker version. Every
>    time there is a broker version change, protocol documentation version
> needs
>    to be updated and linked to main documentation page.
>    3. Deprecation of protocol version will be done via marking the version
>    as deprecated on the protocol documentation.
>    4. On getting unknown protocol version, broker will send an empty
>    response, instead of simply closing client connection.
>    5. Metadata response will be enhanced to also contain broker version,
>    VersionInt and VersionString. VersionString will contain internal
>    version information.
>

Clarification: only needs to include version of the responding broker, not
for all returned brokers.


>    6. Metadata request with single null topic and size of -1 can be used to
>    fetch metadata response with only broker version information and no
>    topic/broker info.

   7. On receiving a metadata request with single null topic with size of
>    -1, broker will respond with only broker version.
>

Clarification: It should just skip the topic enumeration, broker
enumeration should still be included
since this is used to seed the broker list in the client.


>
> Please correct/add, if I missed out something. If the aforementioned
> changes sound good, I can update the KIP-35 wiki, WIP PR and start a Vote
> thread.
>
> On Fri, Mar 11, 2016 at 12:48 PM, Magnus Edenhill <mag...@edenhill.se>
> wrote:
>
> > I'm not sure supporting specific interim versions between releases are
> > really that big of a concern,
> > for a start the protocol changes may be in flux and not settle until the
> > formal release, secondly
> > the 3rd party clients typically lag behind at least until the formal
> > release before they implement support (for the first stated reason..).
> > But this is still a good point and if we could use the version fields to
> > specify a point between
> > two formal releases then that would be useful to ease client development
> > during that period.
> > Grabbing 0.10.0 from versionInt and "IV<N>" from versionString is an
> > acceptable solution as long
> > as there is some way for a client to distinguish the formal release.
> >
> >
> > /Magnus
> >
> >
> >
> >
> > 2016-03-11 20:27 GMT+01:00 Gwen Shapira <g...@confluent.io>:
> >
> > > Yeah, I'm not sure that 0.10.0-IV1 and 0.10.0-IV2 is what Magnus had
> > > in mind when he was advocating for release versions in the protocol.
> > >
> > > But - if we serialize both the string and the integer Id of ApiVersion
> > > into the Metadata object, I think both Magnus and Jay will be happy :)
> > >
> > > Gwen
> > >
> > > On Fri, Mar 11, 2016 at 11:22 AM, Ismael Juma <ism...@juma.me.uk>
> wrote:
> > > > We introduced a way to bump the API version in between releases as
> part
> > > of
> > > > the KIP-31/KIP-32 by the way. Extending that could maybe work. Take a
> > > look
> > > > at the ApiVersion class and its documentation.
> > > >
> > > > Ismael
> > > > On 11 Mar 2016 19:06, "Gwen Shapira" <g...@confluent.io> wrote:
> > > >
> > > >> Magnus,
> > > >>
> > > >> If we go with release version as protocol version (which I agree is
> > > >> much more user-friendly) - what will be the release version on
> trunk?
> > > >> 0.10.0-SNAPSHOT?
> > > >> How will clients handle the fact that some 0.10.0-SNAPSHOT will have
> > > >> different protocol than others (because we modify the protocol
> > > >> multiple times between releases)?
> > > >>
> > > >> Gwen
> > > >>
> > > >> On Thu, Mar 10, 2016 at 1:52 PM, Magnus Edenhill <
> mag...@edenhill.se>
> > > >> wrote:
> > > >> > Hi all,
> > > >> >
> > > >> > sorry for joining late in the game, the carribean got in the way.
> > > >> >
> > > >> > My thoughts:
> > > >> >
> > > >> > There is no way around the chicken&egg problem, so the sooner we
> can
> > > >> > add protocol versioning functionality the better and we'll add
> > > heuristics
> > > >> > in clients to
> > > >> > handle the migration period (e.g, what Dana has done in
> > kafka-python).
> > > >> > The focus at this point should be to mitigate the core issue
> (allow
> > > >> clients
> > > >> > to know what is supported)
> > > >> > in the least intrusive way. Hopefully we can redesign the protocol
> > in
> > > the
> > > >> > future to add proper
> > > >> > response headers, etc.
> > > >> >
> > > >> > I'm with Data that reusing the broker version as a protocol
> version
> > > will
> > > >> > work just fine and
> > > >> > saves us from administrating another version.
> > > >> > From a client's perspective an explicit protocol version doesn't
> > > really
> > > >> add
> > > >> > any value.
> > > >> > I'd rather maintain a mapping of actual broker versions to
> supported
> > > >> > protocol requests rather than
> > > >> > some independent protocol version that still needs to be
> translated
> > > to a
> > > >> > broker version for
> > > >> > proper code maintainability / error messages / etc.
> > > >> >
> > > >> >
> > > >> > Thus my suggestion is in line with some of the previous speakers,
> > > that is
> > > >> > is to keep things
> > > >> > simple and bump the MetadataRequest version to 1 by adding a
> > > >> VersionString
> > > >> > ("0.9.1.0")
> > > >> > and VersionInt (0x00090100) field to the response.
> > > >> > These fields return version information for the current
> connection's
> > > >> broker
> > > >> > only, not for other broker's
> > > >> > in the cluster:
> > > >> > Providing version information for other brokers doesn't really
> serve
> > > any
> > > >> > purpose:
> > > >> >  a) the information is cached by the responding broker so it might
> > be
> > > >> > outdated ( = cant be trusted)
> > > >> >  b) by the time the client connects to a given broker it might
> have
> > > >> upgraded
> > > >> >
> > > >> > This means that a client (that is interested in protocol
> versioning)
> > > will
> > > >> > need to query each
> > > >> > connection's version any way. Since MetadataRequets are typically
> > > already
> > > >> > sent on connection set up
> > > >> > this seems to be the proper place to put it.
> > > >> >
> > > >> > The MetadataRequest semantics should also be extended to allow
> > asking
> > > >> only
> > > >> > for cluster and version information,
> > > >> > but not the topic list since this might have negative performance
> > > impact
> > > >> on
> > > >> > large clusters with many topics.
> > > >> > One way to achieve this would be to provide one single Null topic
> in
> > > the
> > > >> > request (length=-1).
> > > >> >
> > > >> > Sending a new Metadata V1 request to an old broker will cause the
> > > >> > connection to be closed and
> > > >> > the client will need to use this as a heuristic to downgrade its
> > > protocol
> > > >> > ambitions to an older version
> > > >> > (either by some default value or by user configuration).
> > > >> >
> > > >> >
> > > >> > /Magnus
> > > >> >
> > > >> >
> > > >> > 2016-03-10 20:04 GMT+01:00 Ashish Singh <asi...@cloudera.com>:
> > > >> >
> > > >> >> @Magnus,
> > > >> >>
> > > >> >> Does the latest suggestion sound OK to you. I am planning to
> update
> > > PR
> > > >> >> based on latest suggestion.
> > > >> >>
> > > >> >> On Mon, Mar 7, 2016 at 10:58 AM, Ashish Singh <
> asi...@cloudera.com
> > >
> > > >> wrote:
> > > >> >>
> > > >> >> >
> > > >> >> >
> > > >> >> > On Fri, Mar 4, 2016 at 5:46 PM, Jay Kreps <j...@confluent.io>
> > > wrote:
> > > >> >> >
> > > >> >> >> Hey Ashish,
> > > >> >> >>
> > > >> >> >> Both good points.
> > > >> >> >>
> > > >> >> >> I think the issue with the general metadata request is the
> same
> > as
> > > >> the
> > > >> >> >> issue with a version-specific metadata request from the other
> > > >> >> >> proposal--basically it's a chicken and egg problem, to find
> out
> > > >> anything
> > > >> >> >> about the cluster you have to be able to communicate something
> > in
> > > a
> > > >> >> format
> > > >> >> >> the server can understand without knowing a priori what
> version
> > > it's
> > > >> >> on. I
> > > >> >> >> guess the question is how can you continue to evolve the
> > metadata
> > > >> >> request
> > > >> >> >> (whether it is the existing metadata or a protocol-version
> > > specific
> > > >> >> >> metadata request) given that you need this information to
> > > bootstrap
> > > >> you
> > > >> >> >> have to be more careful in how that request evolves.
> > > >> >> >>
> > > >> >> > You are correct. It's just that protocol version request would
> be
> > > very
> > > >> >> > specific to retrieve the protocol versions. Changes to protocol
> > > >> version
> > > >> >> > request itself should be very rare, if at all. However, the
> > general
> > > >> >> > metadata request carries a lot more information and its format
> is
> > > more
> > > >> >> > probable to evolve. This boils down to higher probability of
> > change
> > > >> vs a
> > > >> >> > definite network round-trip for each re/connect. It does sound
> > > like,
> > > >> it
> > > >> >> is
> > > >> >> > better to avoid a definite penalty than to avoid a probable
> rare
> > > >> issue.
> > > >> >> >
> > > >> >> >>
> > > >> >> >> I think deprecation/removal may be okay. Ultimately clients
> will
> > > >> always
> > > >> >> >> use
> > > >> >> >> the highest possible version of the protocol the server
> supports
> > > so
> > > >> if
> > > >> >> >> we've already deprecated and removed your highest version then
> > you
> > > >> are
> > > >> >> >> screwed and you're going to get an error no matter what,
> right?
> > > >> >> Basically
> > > >> >> >> there is nothing dynamic you can do in that case.
> > > >> >> >>
> > > >> >> > Sure, this should be expected. Just wanted to make sure
> > > deprecation is
> > > >> >> > still on the table.
> > > >> >> >
> > > >> >> >>
> > > >> >> >> -Jay
> > > >> >> >>
> > > >> >> >> On Fri, Mar 4, 2016 at 4:05 PM, Ashish Singh <
> > asi...@cloudera.com
> > > >
> > > >> >> wrote:
> > > >> >> >>
> > > >> >> >> > Hello Jay,
> > > >> >> >> >
> > > >> >> >> > The overall approach sounds good. I do realize that this
> > > discussion
> > > >> >> has
> > > >> >> >> > gotten too lengthy and is starting to shoot tangents. Maybe
> a
> > > KIP
> > > >> call
> > > >> >> >> will
> > > >> >> >> > help us getting to a decision faster. I do have a few
> > questions
> > > >> >> though.
> > > >> >> >> >
> > > >> >> >> > On Fri, Mar 4, 2016 at 9:52 AM, Jay Kreps <j...@confluent.io
> >
> > > >> wrote:
> > > >> >> >> >
> > > >> >> >> > > Yeah here is my summary of my take:
> > > >> >> >> > >
> > > >> >> >> > > 1. Negotiating a per-connection protocol actually does
> add a
> > > lot
> > > >> of
> > > >> >> >> > > complexity to clients (many more failure states to get
> > right).
> > > >> >> >> > >
> > > >> >> >> > > 2. Having the client configure the protocol version
> manually
> > > is
> > > >> >> doable
> > > >> >> >> > now
> > > >> >> >> > > but probably a worse state. I suspect this will lead to
> more
> > > not
> > > >> >> less
> > > >> >> >> > > confusion.
> > > >> >> >> > >
> > > >> >> >> > > 3. I don't think the current state is actually that bad.
> > > >> Integrators
> > > >> >> >> > pick a
> > > >> >> >> > > conservative version and build against that. There is a
> > > tradeoff
> > > >> >> >> between
> > > >> >> >> > > getting the new features and being compatible with old
> Kafka
> > > >> >> versions.
> > > >> >> >> > But
> > > >> >> >> > > a large part of this tradeoff is essential since new
> > features
> > > >> aren't
> > > >> >> >> > going
> > > >> >> >> > > to magically appear on old servers, so even if you upgrade
> > > your
> > > >> >> client
> > > >> >> >> > you
> > > >> >> >> > > likely aren't going to get the new stuff (since we will
> end
> > up
> > > >> >> >> > dynamically
> > > >> >> >> > > turning it off). Having client features that are there but
> > > don't
> > > >> >> work
> > > >> >> >> > > because you're on an old cluster may actually be a worse
> > > >> experience
> > > >> >> if
> > > >> >> >> > not
> > > >> >> >> > > handled very carefully..
> > > >> >> >> > >
> > > >> >> >> > > 4. The problems Dana brought up are totally orthogonal to
> > the
> > > >> >> problem
> > > >> >> >> of
> > > >> >> >> > > having per-api versions or overall versions. The problem
> was
> > > >> that we
> > > >> >> >> > > changed behavior subtly without changing the version. This
> > > will
> > > >> be
> > > >> >> an
> > > >> >> >> > issue
> > > >> >> >> > > regardless of whether the version is global or not.
> > > >> >> >> > >
> > > >> >> >> > > 5. Using the broker release as the version is strictly
> worse
> > > than
> > > >> >> >> using a
> > > >> >> >> > > global protocol version (0, 1, 2, ...) that increments any
> > > time
> > > >> any
> > > >> >> >> api
> > > >> >> >> > > changes but doesn't increment just because non-protocol
> code
> > > is
> > > >> >> >> changed.
> > > >> >> >> > > The problem with using the broker release version is we
> want
> > > to
> > > >> be
> > > >> >> >> able
> > > >> >> >> > to
> > > >> >> >> > > keep Kafka releasable from any commit which means there
> > isn't
> > > as
> > > >> >> >> clear a
> > > >> >> >> > > sequencing of releases as you would think.
> > > >> >> >> > >
> > > >> >> >> > > 6. We need to consider the case of mixed version clusters
> > > during
> > > >> the
> > > >> >> >> time
> > > >> >> >> > > period when you are upgrading Kafka.
> > > >> >> >> > >
> > > >> >> >> > > So overall I think this is not a critical thing to do
> right
> > > now,
> > > >> but
> > > >> >> >> if
> > > >> >> >> > we
> > > >> >> >> > > are going to do it we should do it in a way that actually
> > > >> improves
> > > >> >> >> > things.
> > > >> >> >> > >
> > > >> >> >> > > Here would be one proposal for that:
> > > >> >> >> > > a. Add a global protocol version that increments with any
> > api
> > > >> >> version
> > > >> >> >> > > update. Move the documentation so that the docs are by
> > > version.
> > > >> This
> > > >> >> >> is
> > > >> >> >> > > basically just a short-hand for a complete set of
> supported
> > > api
> > > >> >> >> versions.
> > > >> >> >> > > b. Include a field in the metadata response for each
> broker
> > > that
> > > >> >> adds
> > > >> >> >> the
> > > >> >> >> > > protocol version.
> > > >> >> >> > >
> > > >> >> >> > There might be an issue here where the metadata request
> > version
> > > >> sent
> > > >> >> by
> > > >> >> >> > client is not supported by broker, an older broker. However,
> > if
> > > we
> > > >> are
> > > >> >> >> > clearly stating that a client is not guaranteed to work with
> > an
> > > >> older
> > > >> >> >> > broker then this becomes expected. This will potentially
> limit
> > > us
> > > >> in
> > > >> >> >> terms
> > > >> >> >> > of supporting downgrades though, if we ever want to.
> > > >> >> >> >
> > > >> >> >> > > c. To maintain the protocol version this information will
> > > have to
> > > >> >> get
> > > >> >> >> > > propagated with the rest of the broker metadata like host,
> > > port,
> > > >> id,
> > > >> >> >> etc.
> > > >> >> >> > >
> > > >> >> >> > > The instructions to clients would be:
> > > >> >> >> > > - By default you build against a single conservative Kafka
> > > >> protocol
> > > >> >> >> > version
> > > >> >> >> > > and we carry that support forward, as today
> > > >> >> >> > >
> > > >> >> >> > If I am getting this correct, this will mean we will never
> > > >> >> >> deprecate/remove
> > > >> >> >> > any protocol version in future. Having some way to
> > > deprecate/remove
> > > >> >> >> older
> > > >> >> >> > protocol versions will probably be a good idea. It is
> possible
> > > with
> > > >> >> the
> > > >> >> >> > global protocol version approach, it could be as simple as
> > > marking
> > > >> a
> > > >> >> >> > protocol deprecated in protocol doc before removing it. Just
> > > want
> > > >> to
> > > >> >> >> make
> > > >> >> >> > sure deprecation is still on the table.
> > > >> >> >> >
> > > >> >> >> > > - If you want to get fancy you can use the protocol
> version
> > > >> field in
> > > >> >> >> the
> > > >> >> >> > > metadata request to more dynamically chose what features
> are
> > > >> >> available
> > > >> >> >> > and
> > > >> >> >> > > select api versions appropriately. This is purely
> optional.
> > > >> >> >> > >
> > > >> >> >> > > -Jay
> > > >> >> >> > >
> > > >> >> >> > > On Thu, Mar 3, 2016 at 9:38 PM, Jason Gustafson <
> > > >> ja...@confluent.io
> > > >> >> >
> > > >> >> >> > > wrote:
> > > >> >> >> > >
> > > >> >> >> > > > I talked with Jay about this KIP briefly this morning,
> so
> > > let
> > > >> me
> > > >> >> >> try to
> > > >> >> >> > > > summarize the discussion (I'm sure he'll jump in if I
> get
> > > >> anything
> > > >> >> >> > > wrong).
> > > >> >> >> > > > Apologies in advance for the length.
> > > >> >> >> > > >
> > > >> >> >> > > > I think we both share some skepticism that a request
> with
> > > all
> > > >> the
> > > >> >> >> > > supported
> > > >> >> >> > > > versions of all the request APIs is going to be a useful
> > > >> primitive
> > > >> >> >> to
> > > >> >> >> > try
> > > >> >> >> > > > and build client compatibility around. In practice I
> think
> > > >> people
> > > >> >> >> would
> > > >> >> >> > > end
> > > >> >> >> > > > up checking for particular request versions in order to
> > > >> determine
> > > >> >> if
> > > >> >> >> > the
> > > >> >> >> > > > broker is 0.8 or 0.9 or whatever, and then change
> behavior
> > > >> >> >> accordingly.
> > > >> >> >> > > I'm
> > > >> >> >> > > > wondering if there's a reasonable way to handle the
> > version
> > > >> >> >> responses
> > > >> >> >> > > that
> > > >> >> >> > > > doesn't amount to that. Maybe you could try to capture
> > > feature
> > > >> >> >> > > > compatibility by checking the versions for a subset of
> > > request
> > > >> >> >> types?
> > > >> >> >> > For
> > > >> >> >> > > > example, to ensure that you can use the new consumer
> API,
> > > you
> > > >> >> check
> > > >> >> >> > that
> > > >> >> >> > > > the group coordinator request is present, the offset
> > commit
> > > >> >> request
> > > >> >> >> > > version
> > > >> >> >> > > > is greater than 2, the offset fetch request is greater
> > than
> > > 1,
> > > >> and
> > > >> >> >> the
> > > >> >> >> > > join
> > > >> >> >> > > > group request is present. And to ensure compatibility
> with
> > > >> KIP-32,
> > > >> >> >> > maybe
> > > >> >> >> > > > you only need to check the appropriate versions of the
> > fetch
> > > >> and
> > > >> >> >> > produce
> > > >> >> >> > > > requests. That sounds kind of complicated to keep track
> of
> > > and
> > > >> you
> > > >> >> >> > > probably
> > > >> >> >> > > > end up trying to handle combinations which aren't even
> > > >> possible in
> > > >> >> >> > > > practice.
> > > >> >> >> > > >
> > > >> >> >> > > > The alternative is to use a single API version. It could
> > be
> > > the
> > > >> >> >> Kafka
> > > >> >> >> > > > release version, but then you need to figure out how to
> > > handle
> > > >> >> users
> > > >> >> >> > who
> > > >> >> >> > > > are running off of trunk since multiple API versions
> will
> > > >> >> typically
> > > >> >> >> > > change
> > > >> >> >> > > > between releases. Perhaps it makes more sense to keep a
> > > >> separate
> > > >> >> API
> > > >> >> >> > > > version number which is incremented every time any one
> of
> > > the
> > > >> API
> > > >> >> >> > > versions
> > > >> >> >> > > > increases? This also decouples the protocol from the
> Kafka
> > > >> >> >> > distribution.
> > > >> >> >> > > >
> > > >> >> >> > > > As far as whether there should be a separate request or
> > > not, I
> > > >> get
> > > >> >> >> > > Becket's
> > > >> >> >> > > > point that you would only need to do the version check
> > once
> > > >> when a
> > > >> >> >> > > > connection is established, but another round trip still
> > > >> >> complicates
> > > >> >> >> the
> > > >> >> >> > > > picture quite a bit. Before you just need to send a
> > metadata
> > > >> >> >> request to
> > > >> >> >> > > > bootstrap yourself to the cluster, but now you need to
> do
> > > >> version
> > > >> >> >> > > > negotiation before you can even do that, and then you
> need
> > > to
> > > >> try
> > > >> >> >> adapt
> > > >> >> >> > > to
> > > >> >> >> > > > the versions reported. Jay brought up the point that you
> > > >> probably
> > > >> >> >> > > wouldn't
> > > >> >> >> > > > design a protocol from scratch to work this way. Using
> the
> > > >> >> metadata
> > > >> >> >> > > request
> > > >> >> >> > > > would be better if it's possible, but you need a way to
> > > handle
> > > >> the
> > > >> >> >> fact
> > > >> >> >> > > > that a broker's version might be stale by the time you
> > > connect
> > > >> to
> > > >> >> >> it.
> > > >> >> >> > And
> > > >> >> >> > > > even then you're going to have to deal internally with
> the
> > > >> >> >> complexity
> > > >> >> >> > > > involved in trying to upgrade/downgrade dynamically,
> which
> > > >> sounds
> > > >> >> >> to me
> > > >> >> >> > > > like it would have a ton of edge cases.
> > > >> >> >> > > >
> > > >> >> >> > > > Taking a bit of a step back, any solution is probably
> > going
> > > to
> > > >> be
> > > >> >> >> > painful
> > > >> >> >> > > > since the Kafka protocol was not designed for this use
> > case.
> > > >> >> >> Currently
> > > >> >> >> > > what
> > > >> >> >> > > > that means for clients that /want/ to support
> > compatibility
> > > >> across
> > > >> >> >> > broker
> > > >> >> >> > > > versions is that they need to have the user tell them
> the
> > > >> broker
> > > >> >> >> > version
> > > >> >> >> > > > through configuration (e.g. librdkafka has a
> > > "protocol.version"
> > > >> >> >> field
> > > >> >> >> > for
> > > >> >> >> > > > this purpose). The only real problem with this in my
> mind
> > is
> > > >> that
> > > >> >> we
> > > >> >> >> > > don't
> > > >> >> >> > > > have a graceful way to detect request incompatibility,
> > > which is
> > > >> >> why
> > > >> >> >> > there
> > > >> >> >> > > > are so many questions on the user list which basically
> > > amount
> > > >> to
> > > >> >> the
> > > >> >> >> > > client
> > > >> >> >> > > > hanging because the broker refuses to respond to a
> request
> > > it
> > > >> >> >> doesn't
> > > >> >> >> > > > understand. If you solve this problem, then depending on
> > > >> >> >> configuration
> > > >> >> >> > > > seems totally reasonable and we can skip trying to
> > implement
> > > >> >> request
> > > >> >> >> > > > version negotiation. Magnus's solution in this KIP may
> > seem
> > > a
> > > >> >> little
> > > >> >> >> > > hacky,
> > > >> >> >> > > > but it also seems like the only way to do it without
> > > changing
> > > >> the
> > > >> >> >> > header.
> > > >> >> >> > > >
> > > >> >> >> > > > The Spark problem mentioned above is interesting and I
> > agree
> > > >> that
> > > >> >> it
> > > >> >> >> > > sucks
> > > >> >> >> > > > for frameworks that need to ship the kafka client
> library
> > > since
> > > >> >> they
> > > >> >> >> > have
> > > >> >> >> > > > to figure out how to bundle multiple versions.
> Ultimately
> > > if we
> > > >> >> >> want to
> > > >> >> >> > > > solve this problem, then it sounds like we need to
> commit
> > to
> > > >> >> >> > maintaining
> > > >> >> >> > > > compatibility with older versions of Kafka in the client
> > > going
> > > >> >> >> forward.
> > > >> >> >> > > > That's a lot bigger decision and it matters less whether
> > the
> > > >> >> broker
> > > >> >> >> > > version
> > > >> >> >> > > > is found through configuration, topic metadata, or a new
> > > >> request
> > > >> >> >> type.
> > > >> >> >> > > >
> > > >> >> >> > > > -Jason
> > > >> >> >> > > >
> > > >> >> >> > > >
> > > >> >> >> > > > On Thu, Mar 3, 2016 at 3:59 PM, Becket Qin <
> > > >> becket....@gmail.com>
> > > >> >> >> > wrote:
> > > >> >> >> > > >
> > > >> >> >> > > > > Hi Ashish,
> > > >> >> >> > > > >
> > > >> >> >> > > > > In approach (1), the clients will still be able to
> > talked
> > > to
> > > >> >> >> multiple
> > > >> >> >> > > > > versions of Kafka brokers as long as the clients
> version
> > > is
> > > >> not
> > > >> >> >> > higher
> > > >> >> >> > > > than
> > > >> >> >> > > > > the broker version, right?
> > > >> >> >> > > > >
> > > >> >> >> > > > > From Spark's point of view, it seems the difference is
> > > >> whether
> > > >> >> >> Spark
> > > >> >> >> > > can
> > > >> >> >> > > > > independently update their Kafka clients dependency or
> > > not.
> > > >> More
> > > >> >> >> > > > > specifically, consider the following three scenarios:
> > > >> >> >> > > > > A. Spark has some new features that do not rely on
> > > clients or
> > > >> >> >> brokers
> > > >> >> >> > > in
> > > >> >> >> > > > a
> > > >> >> >> > > > > new Kafka release.
> > > >> >> >> > > > > B. Spark has some new features that only rely on the
> > > clients
> > > >> in
> > > >> >> a
> > > >> >> >> new
> > > >> >> >> > > > Kafka
> > > >> >> >> > > > > release, but not rely on the brokers in a new Kafka
> > > release.
> > > >> >> e.g.
> > > >> >> >> New
> > > >> >> >> > > > > client provides a listTopic() method.
> > > >> >> >> > > > > C. Spark has some new features that rely on both the
> > > clients
> > > >> and
> > > >> >> >> > > brokers
> > > >> >> >> > > > in
> > > >> >> >> > > > > a new Kafka release. e.g timestamp field.
> > > >> >> >> > > > >
> > > >> >> >> > > > > For A, Spark does not need to update the Kafka
> > dependency
> > > >> >> because
> > > >> >> >> > there
> > > >> >> >> > > > is
> > > >> >> >> > > > > no need and the old clients can talk to both new and
> old
> > > >> Kafka
> > > >> >> >> > brokers.
> > > >> >> >> > > > > For C, Spark has to wait for broker upgrade anyways.
> > > >> >> >> > > > > So in the above two scenarios, there is not much
> > > difference
> > > >> >> >> between
> > > >> >> >> > > > > approach (1) and (2).
> > > >> >> >> > > > >
> > > >> >> >> > > > > B is a tricky scenario. Because it is possible that we
> > > >> introduce
> > > >> >> >> both
> > > >> >> >> > > > > listTopic() and the timestamp field in the same Kafka
> > > >> release,
> > > >> >> >> and we
> > > >> >> >> > > > don't
> > > >> >> >> > > > > know if Spark needs both or only uses listTopic().
> > > >> >> >> > > > > This indicates the client should work fine if a method
> > is
> > > >> >> >> supported
> > > >> >> >> > and
> > > >> >> >> > > > > should throw exception when a method is not
> supported. I
> > > >> think
> > > >> >> we
> > > >> >> >> can
> > > >> >> >> > > do
> > > >> >> >> > > > > the following:
> > > >> >> >> > > > > 0. Clients always use its highest request version. The
> > > >> clients
> > > >> >> >> keeps
> > > >> >> >> > a
> > > >> >> >> > > > > static final map recording the minimum required
> > ApiVersion
> > > >> for
> > > >> >> >> each
> > > >> >> >> > > > > request.
> > > >> >> >> > > > > 1. When connect to a broker, the clients always send
> an
> > > >> >> >> > > ApiVersionRequest
> > > >> >> >> > > > > to the broker.
> > > >> >> >> > > > > 2. The broker replies with the its highest supported
> > > >> ApiVersion.
> > > >> >> >> > > > > 3. Before sending a request, the clients checks the
> > > minimum
> > > >> >> >> required
> > > >> >> >> > > > > ApiVersion for that request. If the broker returned
> > > >> ApiVersion
> > > >> >> is
> > > >> >> >> > > higher
> > > >> >> >> > > > > than this minimum required ApiVersion, then we can
> > > proceed.
> > > >> >> >> Otherwise
> > > >> >> >> > > we
> > > >> >> >> > > > > throw something like NotSupportedOperationException.
> > > >> >> >> > > > >
> > > >> >> >> > > > > With this approach, scenario B will also work unless
> > Spark
> > > >> calls
> > > >> >> >> some
> > > >> >> >> > > > > function that is not supported by the Kafka broker,
> > which
> > > >> makes
> > > >> >> it
> > > >> >> >> > > become
> > > >> >> >> > > > > scenario C.
> > > >> >> >> > > > >
> > > >> >> >> > > > > Thoughts?
> > > >> >> >> > > > >
> > > >> >> >> > > > > Thanks,
> > > >> >> >> > > > >
> > > >> >> >> > > > > Jiangjie (Becket) Qin
> > > >> >> >> > > > >
> > > >> >> >> > > > > On Thu, Mar 3, 2016 at 11:24 AM, Ashish Singh <
> > > >> >> >> asi...@cloudera.com>
> > > >> >> >> > > > wrote:
> > > >> >> >> > > > >
> > > >> >> >> > > > > > On Wed, Mar 2, 2016 at 8:29 PM, Becket Qin <
> > > >> >> >> becket....@gmail.com>
> > > >> >> >> > > > wrote:
> > > >> >> >> > > > > >
> > > >> >> >> > > > > > > Hi Jason,
> > > >> >> >> > > > > > >
> > > >> >> >> > > > > > > I was thinking that every time when we connect to
> a
> > > >> broker,
> > > >> >> we
> > > >> >> >> > > first
> > > >> >> >> > > > > send
> > > >> >> >> > > > > > > the version check request. (The version check
> > request
> > > >> itself
> > > >> >> >> > should
> > > >> >> >> > > > be
> > > >> >> >> > > > > > very
> > > >> >> >> > > > > > > simple and never changes across all server
> > releases.)
> > > >> This
> > > >> >> >> does
> > > >> >> >> > add
> > > >> >> >> > > > an
> > > >> >> >> > > > > > > additional round trip, but given reconnect is
> rare,
> > > it is
> > > >> >> >> > probably
> > > >> >> >> > > > > fine.
> > > >> >> >> > > > > > On
> > > >> >> >> > > > > > > the client side, the client will always send
> request
> > > >> using
> > > >> >> the
> > > >> >> >> > > lowest
> > > >> >> >> > > > > > > supported version across all brokers. That means
> if
> > a
> > > >> Kafka
> > > >> >> >> > cluster
> > > >> >> >> > > > is
> > > >> >> >> > > > > > > downgrading, we will use the downgraded protocol
> as
> > > soon
> > > >> as
> > > >> >> >> the
> > > >> >> >> > > > client
> > > >> >> >> > > > > > > connected to an older broker.
> > > >> >> >> > > > > > >
> > > >> >> >> > > > > > This sounds interesting and very similar to current
> > > >> >> suggestion.
> > > >> >> >> > > > However,
> > > >> >> >> > > > > > just to make sure I am getting it right, you are
> > > suggesting
> > > >> >> >> send a
> > > >> >> >> > > > > separate
> > > >> >> >> > > > > > request only for release version?
> > > >> >> >> > > > > >
> > > >> >> >> > > > > > >
> > > >> >> >> > > > > > > @Ashish,
> > > >> >> >> > > > > > > Can you help me understand the pain points from
> > other
> > > >> open
> > > >> >> >> source
> > > >> >> >> > > > > > projects
> > > >> >> >> > > > > > > that you mentioned a little more? There are two
> > > different
> > > >> >> >> levels
> > > >> >> >> > of
> > > >> >> >> > > > > > > requirements:
> > > >> >> >> > > > > > > 1. User wants to know if the client is compatible
> > with
> > > >> the
> > > >> >> >> broker
> > > >> >> >> > > or
> > > >> >> >> > > > > not.
> > > >> >> >> > > > > > > 2. User wants the client and the broker to
> negotiate
> > > the
> > > >> >> >> protocol
> > > >> >> >> > > on
> > > >> >> >> > > > > > their
> > > >> >> >> > > > > > > own.
> > > >> >> >> > > > > > >
> > > >> >> >> > > > > > Not sure which category it falls in, but below is
> the
> > > >> excerpt
> > > >> >> >> from
> > > >> >> >> > > > Mark,
> > > >> >> >> > > > > a
> > > >> >> >> > > > > > spark dev, who has been trying to upgrade spark
> kafka
> > > >> >> >> integration
> > > >> >> >> > to
> > > >> >> >> > > > use
> > > >> >> >> > > > > > 0.9 clients.
> > > >> >> >> > > > > >
> > > >> >> >> > > > > > Based on what I understand, users of Kafka need to
> > > upgrade
> > > >> >> their
> > > >> >> >> > > > brokers
> > > >> >> >> > > > > to
> > > >> >> >> > > > > > Kafka 0.9.x first, before they upgrade their clients
> > to
> > > >> Kafka
> > > >> >> >> > 0.9.x.
> > > >> >> >> > > > > >
> > > >> >> >> > > > > > > However, that presents a problem to other projects
> > > that
> > > >> >> >> integrate
> > > >> >> >> > > > with
> > > >> >> >> > > > > > Kafka (Spark, Flume, Storm, etc.). From here on, I
> > will
> > > >> speak
> > > >> >> >> for
> > > >> >> >> > > > Spark +
> > > >> >> >> > > > > > Kafka, since that's the one I am most familiar with.
> > > >> >> >> > > > > > In the light of compatibility (or the lack thereof)
> > > between
> > > >> >> >> 0.8.x
> > > >> >> >> > and
> > > >> >> >> > > > > > 0.9.x, Spark is faced with a problem of what
> > version(s)
> > > of
> > > >> >> >> Kafka to
> > > >> >> >> > > be
> > > >> >> >> > > > > > compatible with, and has 2 options (discussed in
> this
> > PR
> > > >> >> >> > > > > > <https://github.com/apache/spark/pull/11143>):
> > > >> >> >> > > > > > 1. We either upgrade to Kafka 0.9, dropping support
> > for
> > > >> 0.8.
> > > >> >> >> Storm
> > > >> >> >> > > and
> > > >> >> >> > > > > > Flume are already on this path.
> > > >> >> >> > > > > > 2. We introduce complexity in our code to support
> both
> > > 0.8
> > > >> and
> > > >> >> >> 0.9
> > > >> >> >> > > for
> > > >> >> >> > > > > the
> > > >> >> >> > > > > > entire duration of our next major release (Apache
> > Spark
> > > >> 2.x).
> > > >> >> >> > > > > > I'd love to hear your thoughts on which option, you
> > > >> recommend.
> > > >> >> >> > > > > > Long term, I'd really appreciate if Kafka could do
> > > >> something
> > > >> >> >> that
> > > >> >> >> > > > doesn't
> > > >> >> >> > > > > > make Spark having to support two, or even more
> > versions
> > > of
> > > >> >> >> Kafka.
> > > >> >> >> > > And,
> > > >> >> >> > > > if
> > > >> >> >> > > > > > there is something that I, personally, and Spark
> > project
> > > >> can
> > > >> >> do
> > > >> >> >> in
> > > >> >> >> > > your
> > > >> >> >> > > > > > next release candidate phase to make things easier,
> > > please
> > > >> do
> > > >> >> >> let
> > > >> >> >> > us
> > > >> >> >> > > > > know.
> > > >> >> >> > > > > >
> > > >> >> >> > > > > > This issue has made other projects worry about how
> > they
> > > are
> > > >> >> >> going
> > > >> >> >> > to
> > > >> >> >> > > > keep
> > > >> >> >> > > > > > up with Kafka releases. Last I heard, take this
> with a
> > > >> pinch
> > > >> >> of
> > > >> >> >> > salt,
> > > >> >> >> > > > > Spark
> > > >> >> >> > > > > > folks are discussing about using Maven profiles to
> > build
> > > >> >> against
> > > >> >> >> > > > multiple
> > > >> >> >> > > > > > Kafka versions at compile time, etc. Also, there are
> > > >> clients
> > > >> >> who
> > > >> >> >> > are
> > > >> >> >> > > > > > relying on class-loading tricks with custom
> > > implementation
> > > >> of
> > > >> >> >> OSGi
> > > >> >> >> > to
> > > >> >> >> > > > > solve
> > > >> >> >> > > > > > such issues. Don't quote me on the stuff I just
> > > mentioned,
> > > >> as
> > > >> >> >> this
> > > >> >> >> > is
> > > >> >> >> > > > > what
> > > >> >> >> > > > > > I have heard during casual discussions. The point I
> am
> > > >> trying
> > > >> >> to
> > > >> >> >> > make
> > > >> >> >> > > > is
> > > >> >> >> > > > > > that Kafka clients are worried about being able to
> > > support
> > > >> >> >> multiple
> > > >> >> >> > > > Kafka
> > > >> >> >> > > > > > broker versions. I am sure we all agree on that.
> > > >> >> >> > > > > >
> > > >> >> >> > > > > > I think the second requirement makes more sense
> from a
> > > >> client
> > > >> >> >> > > > > perspective.
> > > >> >> >> > > > > > First req will just tell them that there is a
> problem,
> > > but
> > > >> no
> > > >> >> >> way
> > > >> >> >> > to
> > > >> >> >> > > > work
> > > >> >> >> > > > > > around it.
> > > >> >> >> > > > > >
> > > >> >> >> > > > > > >
> > > >> >> >> > > > > > > Currently in Kafka the principle we are following
> is
> > > to
> > > >> let
> > > >> >> >> > clients
> > > >> >> >> > > > > stick
> > > >> >> >> > > > > > > to a certain version and server will adapt to the
> > > clients
> > > >> >> >> > > > accordingly.
> > > >> >> >> > > > > > > If this KIP doesn't want to break this rule, it
> > seems
> > > we
> > > >> >> >> should
> > > >> >> >> > > > simply
> > > >> >> >> > > > > > let
> > > >> >> >> > > > > > > the clients send the ApiVersion it is using to the
> > > >> brokers
> > > >> >> and
> > > >> >> >> > the
> > > >> >> >> > > > > > brokers
> > > >> >> >> > > > > > > will decide whether to accept or reject the
> clients.
> > > This
> > > >> >> >> means
> > > >> >> >> > > user
> > > >> >> >> > > > > have
> > > >> >> >> > > > > > > to upgrade broker before they upgrade clients.
> This
> > > >> >> satisfies
> > > >> >> >> (1)
> > > >> >> >> > > so
> > > >> >> >> > > > > > that a
> > > >> >> >> > > > > > > newer client will know it does not compatible with
> > an
> > > >> older
> > > >> >> >> > server
> > > >> >> >> > > > > > > immediately.
> > > >> >> >> > > > > > > If this KIP will change that to let the newer
> > clients
> > > >> adapt
> > > >> >> to
> > > >> >> >> > the
> > > >> >> >> > > > > older
> > > >> >> >> > > > > > > brokers,  compatibility wise it is a good thing to
> > > have.
> > > >> >> With
> > > >> >> >> > this
> > > >> >> >> > > > now
> > > >> >> >> > > > > > > users are able to upgrade clients before they
> > upgrade
> > > >> Kafka
> > > >> >> >> > > brokers.
> > > >> >> >> > > > > This
> > > >> >> >> > > > > > > means user can upgrade clients even before upgrade
> > > >> servers.
> > > >> >> >> This
> > > >> >> >> > > > > > satisfies
> > > >> >> >> > > > > > > (2) as the newer clients can also talk to the
> older
> > > >> servers.
> > > >> >> >> > > > > > >
> > > >> >> >> > > > > > More importantly, this will allow a client to talk
> to
> > > >> multiple
> > > >> >> >> > > versions
> > > >> >> >> > > > > of
> > > >> >> >> > > > > > Kafka.
> > > >> >> >> > > > >
> > > >> >> >> > > > >
> > > >> >> >> > > > > > >
> > > >> >> >> > > > > > > If we decide to go with (2). The benefit is that a
> > > newer
> > > >> >> >> client
> > > >> >> >> > > won't
> > > >> >> >> > > > > > break
> > > >> >> >> > > > > > > when talking to an older broker. But functionality
> > > wise,
> > > >> it
> > > >> >> >> might
> > > >> >> >> > > be
> > > >> >> >> > > > > the
> > > >> >> >> > > > > > > same as an older clients.
> > > >> >> >> > > > > > > In the downgrading case, we probably still have to
> > > notify
> > > >> >> all
> > > >> >> >> the
> > > >> >> >> > > > > users.
> > > >> >> >> > > > > > > For example, if application is sending messages
> with
> > > >> >> timestamp
> > > >> >> >> > and
> > > >> >> >> > > > the
> > > >> >> >> > > > > > > broker got downgraded to an older version that
> does
> > > not
> > > >> >> >> support
> > > >> >> >> > > > > > timestamp.
> > > >> >> >> > > > > > > The clients will suddenly start to throw away
> > > timestamps.
> > > >> >> This
> > > >> >> >> > > might
> > > >> >> >> > > > > > affect
> > > >> >> >> > > > > > > the application logic. In this case even if we
> have
> > > >> clients
> > > >> >> >> > > > > automatically
> > > >> >> >> > > > > > > adapted to a lower version broker, the
> applications
> > > might
> > > >> >> >> still
> > > >> >> >> > > > break.
> > > >> >> >> > > > > > > Hence we still need to notify the users about the
> > case
> > > >> when
> > > >> >> >> the
> > > >> >> >> > > > clients
> > > >> >> >> > > > > > is
> > > >> >> >> > > > > > > newer than the brokers. This is the same for both
> > (1)
> > > and
> > > >> >> (2).
> > > >> >> >> > > > > > > Supporting (2) will introduce more complication on
> > the
> > > >> >> client
> > > >> >> >> > side.
> > > >> >> >> > > > And
> > > >> >> >> > > > > > we
> > > >> >> >> > > > > > > may also have to communicate with users about what
> > > >> function
> > > >> >> is
> > > >> >> >> > > > > supported
> > > >> >> >> > > > > > in
> > > >> >> >> > > > > > > the new clients and what is not supported after
> the
> > > >> protocol
> > > >> >> >> > > > > negotiation
> > > >> >> >> > > > > > > finishes.
> > > >> >> >> > > > > > >
> > > >> >> >> > > > > > Totally agreed, however only if clients want to
> > support
> > > >> >> multiple
> > > >> >> >> > > broker
> > > >> >> >> > > > > > versions. If they want to, then I am sure they are
> > > willing
> > > >> to
> > > >> >> >> add
> > > >> >> >> > > some
> > > >> >> >> > > > > > logic on their end.
> > > >> >> >> > > > > >
> > > >> >> >> > > > > > >
> > > >> >> >> > > > > > > Thanks,
> > > >> >> >> > > > > > >
> > > >> >> >> > > > > > > Jiangjie (Becket) Qin
> > > >> >> >> > > > > > >
> > > >> >> >> > > > > > >
> > > >> >> >> > > > > > >
> > > >> >> >> > > > > > >
> > > >> >> >> > > > > > > On Wed, Mar 2, 2016 at 5:58 PM, Dana Powers <
> > > >> >> >> > dana.pow...@gmail.com
> > > >> >> >> > > >
> > > >> >> >> > > > > > wrote:
> > > >> >> >> > > > > > >
> > > >> >> >> > > > > > > > In kafka-python we've been doing something like:
> > > >> >> >> > > > > > > >
> > > >> >> >> > > > > > > > if version >= (0, 9):
> > > >> >> >> > > > > > > >   Do cool new stuff
> > > >> >> >> > > > > > > > elif version >= (0, 8, 2):
> > > >> >> >> > > > > > > >   Do some older stuff
> > > >> >> >> > > > > > > > ....
> > > >> >> >> > > > > > > > else:
> > > >> >> >> > > > > > > >   raise UnsupportedVersionError
> > > >> >> >> > > > > > > >
> > > >> >> >> > > > > > > > This will break if / when the new 0.9 apis are
> > > >> completely
> > > >> >> >> > removed
> > > >> >> >> > > > > from
> > > >> >> >> > > > > > > some
> > > >> >> >> > > > > > > > future release, but should handle intermediate
> > > broker
> > > >> >> >> upgrades.
> > > >> >> >> > > > > Because
> > > >> >> >> > > > > > > we
> > > >> >> >> > > > > > > > can't add support for future apis a priori, I
> > think
> > > the
> > > >> >> >> best we
> > > >> >> >> > > > could
> > > >> >> >> > > > > > do
> > > >> >> >> > > > > > > > here is throw an error that request protocol
> > > version X
> > > >> is
> > > >> >> >> not
> > > >> >> >> > > > > > supported.
> > > >> >> >> > > > > > > > For now that comes through as a broken socket
> > > >> connection,
> > > >> >> so
> > > >> >> >> > > there
> > > >> >> >> > > > is
> > > >> >> >> > > > > > an
> > > >> >> >> > > > > > > > error - just not a super helpful one.
> > > >> >> >> > > > > > > >
> > > >> >> >> > > > > > > > For that reason I'm also in favor of a generic
> > error
> > > >> >> >> response
> > > >> >> >> > > when
> > > >> >> >> > > > a
> > > >> >> >> > > > > > > > protocol req is not recognized.
> > > >> >> >> > > > > > > >
> > > >> >> >> > > > > > > > -Dana
> > > >> >> >> > > > > > > > On Mar 2, 2016 5:38 PM, "Jay Kreps" <
> > > j...@confluent.io>
> > > >> >> >> wrote:
> > > >> >> >> > > > > > > >
> > > >> >> >> > > > > > > > > But won't it be the case that what clients end
> > up
> > > >> doing
> > > >> >> >> would
> > > >> >> >> > > be
> > > >> >> >> > > > > > > > something
> > > >> >> >> > > > > > > > > like
> > > >> >> >> > > > > > > > >    if(version != 0.8.1)
> > > >> >> >> > > > > > > > >       throw new UnsupportedVersionException()
> > > >> >> >> > > > > > > > > which then means the client is broken as soon
> as
> > > we
> > > >> >> >> release a
> > > >> >> >> > > new
> > > >> >> >> > > > > > > server
> > > >> >> >> > > > > > > > > version even though the protocol didn't
> change.
> > > I'm
> > > >> >> >> actually
> > > >> >> >> > > not
> > > >> >> >> > > > > sure
> > > >> >> >> > > > > > > how
> > > >> >> >> > > > > > > > > you could use that information in a forward
> > > >> compatible
> > > >> >> way
> > > >> >> >> > > since
> > > >> >> >> > > > > you
> > > >> >> >> > > > > > > > can't
> > > >> >> >> > > > > > > > > know a priori if you will work with the next
> > > release
> > > >> >> until
> > > >> >> >> > you
> > > >> >> >> > > > know
> > > >> >> >> > > > > > if
> > > >> >> >> > > > > > > > the
> > > >> >> >> > > > > > > > > protocol changed.
> > > >> >> >> > > > > > > > >
> > > >> >> >> > > > > > > > > -Jay
> > > >> >> >> > > > > > > > >
> > > >> >> >> > > > > > > > > On Wed, Mar 2, 2016 at 5:28 PM, Jason
> Gustafson
> > <
> > > >> >> >> > > > > ja...@confluent.io>
> > > >> >> >> > > > > > > > > wrote:
> > > >> >> >> > > > > > > > >
> > > >> >> >> > > > > > > > > > Hey Jay,
> > > >> >> >> > > > > > > > > >
> > > >> >> >> > > > > > > > > > Yeah, I wasn't suggesting that we eliminate
> > > request
> > > >> >> API
> > > >> >> >> > > > versions.
> > > >> >> >> > > > > > > > They're
> > > >> >> >> > > > > > > > > > definitely needed on the broker to support
> > > >> >> >> compatibility. I
> > > >> >> >> > > was
> > > >> >> >> > > > > > just
> > > >> >> >> > > > > > > > > saying
> > > >> >> >> > > > > > > > > > that if a client wants to support multiple
> > > broker
> > > >> >> >> versions
> > > >> >> >> > > > (e.g.
> > > >> >> >> > > > > > 0.8
> > > >> >> >> > > > > > > > and
> > > >> >> >> > > > > > > > > > 0.9), then it makes more sense to me to make
> > the
> > > >> kafka
> > > >> >> >> > > release
> > > >> >> >> > > > > > > version
> > > >> >> >> > > > > > > > > > available in order to determine which
> version
> > of
> > > >> the
> > > >> >> >> > request
> > > >> >> >> > > > API
> > > >> >> >> > > > > > > should
> > > >> >> >> > > > > > > > > be
> > > >> >> >> > > > > > > > > > used rather than adding a new request type
> > which
> > > >> >> exposes
> > > >> >> >> > all
> > > >> >> >> > > of
> > > >> >> >> > > > > the
> > > >> >> >> > > > > > > > > > different supported versions for all of the
> > > request
> > > >> >> >> types.
> > > >> >> >> > > > > Request
> > > >> >> >> > > > > > > API
> > > >> >> >> > > > > > > > > > versions all change in lockstep with Kafka
> > > releases
> > > >> >> >> anyway.
> > > >> >> >> > > > > > > > > >
> > > >> >> >> > > > > > > > > > -Jason
> > > >> >> >> > > > > > > > > >
> > > >> >> >> > > > > > > > > > On Wed, Mar 2, 2016 at 5:15 PM, Becket Qin <
> > > >> >> >> > > > becket....@gmail.com
> > > >> >> >> > > > > >
> > > >> >> >> > > > > > > > wrote:
> > > >> >> >> > > > > > > > > >
> > > >> >> >> > > > > > > > > > > I think using Kafka release version makes
> > > sense.
> > > >> >> More
> > > >> >> >> > > > > > particularly,
> > > >> >> >> > > > > > > > we
> > > >> >> >> > > > > > > > > > can
> > > >> >> >> > > > > > > > > > > use the ApiVersion and this will cover all
> > the
> > > >> >> >> interval
> > > >> >> >> > > > version
> > > >> >> >> > > > > > as
> > > >> >> >> > > > > > > > > well.
> > > >> >> >> > > > > > > > > > In
> > > >> >> >> > > > > > > > > > > KAFKA-3025, we added the ApiVersion to
> > message
> > > >> >> format
> > > >> >> >> > > version
> > > >> >> >> > > > > > > > mapping,
> > > >> >> >> > > > > > > > > We
> > > >> >> >> > > > > > > > > > > can add the ApiKey to version mapping to
> > > >> ApiVersion
> > > >> >> as
> > > >> >> >> > > well.
> > > >> >> >> > > > We
> > > >> >> >> > > > > > can
> > > >> >> >> > > > > > > > > move
> > > >> >> >> > > > > > > > > > > ApiVersion class to o.a.k.c package and
> use
> > it
> > > >> for
> > > >> >> >> both
> > > >> >> >> > > > server
> > > >> >> >> > > > > > and
> > > >> >> >> > > > > > > > > > clients.
> > > >> >> >> > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > @Jason, if we cache the release info in
> > > metadata
> > > >> and
> > > >> >> >> not
> > > >> >> >> > > > > > > re-validate
> > > >> >> >> > > > > > > > > the
> > > >> >> >> > > > > > > > > > > release on reconnect, would it still work
> if
> > > we
> > > >> do a
> > > >> >> >> > > rolling
> > > >> >> >> > > > > > > > downgrade?
> > > >> >> >> > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > On Wed, Mar 2, 2016 at 3:16 PM, Jason
> > > Gustafson <
> > > >> >> >> > > > > > > ja...@confluent.io>
> > > >> >> >> > > > > > > > > > > wrote:
> > > >> >> >> > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > I think Dana's suggestion to include the
> > > Kafka
> > > >> >> >> release
> > > >> >> >> > > > > version
> > > >> >> >> > > > > > > > makes
> > > >> >> >> > > > > > > > > a
> > > >> >> >> > > > > > > > > > > lot
> > > >> >> >> > > > > > > > > > > > of sense. I'm actually wondering why you
> > > would
> > > >> >> need
> > > >> >> >> the
> > > >> >> >> > > > > > > individual
> > > >> >> >> > > > > > > > > API
> > > >> >> >> > > > > > > > > > > > versions if you have that? It sounds
> like
> > > >> keeping
> > > >> >> >> track
> > > >> >> >> > > of
> > > >> >> >> > > > > all
> > > >> >> >> > > > > > > the
> > > >> >> >> > > > > > > > > api
> > > >> >> >> > > > > > > > > > > > version information would add a lot of
> > > >> complexity
> > > >> >> to
> > > >> >> >> > > > clients
> > > >> >> >> > > > > > > since
> > > >> >> >> > > > > > > > > > > they'll
> > > >> >> >> > > > > > > > > > > > have to try to handle different version
> > > >> >> permutations
> > > >> >> >> > > which
> > > >> >> >> > > > > are
> > > >> >> >> > > > > > > not
> > > >> >> >> > > > > > > > > > > actually
> > > >> >> >> > > > > > > > > > > > possible in practice. Wouldn't it be
> > > simpler to
> > > >> >> know
> > > >> >> >> > that
> > > >> >> >> > > > > > you're
> > > >> >> >> > > > > > > > > > talking
> > > >> >> >> > > > > > > > > > > to
> > > >> >> >> > > > > > > > > > > > an 0.9 broker than that you're talking
> to
> > a
> > > >> broker
> > > >> >> >> > which
> > > >> >> >> > > > > > supports
> > > >> >> >> > > > > > > > > > > version 2
> > > >> >> >> > > > > > > > > > > > of the group coordinator request,
> version
> > 1
> > > of
> > > >> >> fetch
> > > >> >> >> > > > request,
> > > >> >> >> > > > > > > etc?
> > > >> >> >> > > > > > > > > > Also,
> > > >> >> >> > > > > > > > > > > > the release version could be included in
> > the
> > > >> >> broker
> > > >> >> >> > > > > information
> > > >> >> >> > > > > > > in
> > > >> >> >> > > > > > > > > the
> > > >> >> >> > > > > > > > > > > > topic metadata request which would save
> > the
> > > >> need
> > > >> >> for
> > > >> >> >> > the
> > > >> >> >> > > > > > > additional
> > > >> >> >> > > > > > > > > > round
> > > >> >> >> > > > > > > > > > > > trip on every reconnect.
> > > >> >> >> > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > -Jason
> > > >> >> >> > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > On Tue, Mar 1, 2016 at 7:59 PM, Ashish
> > > Singh <
> > > >> >> >> > > > > > > asi...@cloudera.com>
> > > >> >> >> > > > > > > > > > > wrote:
> > > >> >> >> > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > > On Tue, Mar 1, 2016 at 6:30 PM, Gwen
> > > Shapira
> > > >> <
> > > >> >> >> > > > > > > g...@confluent.io>
> > > >> >> >> > > > > > > > > > > wrote:
> > > >> >> >> > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > > > One more thing, the KIP actually
> had 3
> > > >> parts:
> > > >> >> >> > > > > > > > > > > > > > 1. The version protocol
> > > >> >> >> > > > > > > > > > > > > > 2. New response on messages of wrong
> > API
> > > >> key
> > > >> >> or
> > > >> >> >> > wrong
> > > >> >> >> > > > > > version
> > > >> >> >> > > > > > > > > > > > > > 3. Protocol documentation
> > > >> >> >> > > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > > There is a WIP patch for adding
> protocol
> > > >> docs,
> > > >> >> >> > > > > > > > > > > > >
> > https://github.com/apache/kafka/pull/970
> > > .
> > > >> By
> > > >> >> >> > protocol
> > > >> >> >> > > > > > > > > > documentation,
> > > >> >> >> > > > > > > > > > > > you
> > > >> >> >> > > > > > > > > > > > > mean updating this, right?
> > > >> >> >> > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > > > I understand that you are offering
> to
> > > only
> > > >> >> >> > implement
> > > >> >> >> > > > part
> > > >> >> >> > > > > > 1?
> > > >> >> >> > > > > > > > > > > > > > But the KIP discussion and vote
> should
> > > >> still
> > > >> >> >> cover
> > > >> >> >> > > all
> > > >> >> >> > > > > > three
> > > >> >> >> > > > > > > > > parts,
> > > >> >> >> > > > > > > > > > > > > > they will just be implemented in
> > > separate
> > > >> >> JIRA?
> > > >> >> >> > > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > > The patch for KAFKA-3307,
> > > >> >> >> > > > > > > > https://github.com/apache/kafka/pull/986
> > > >> >> >> > > > > > > > > ,
> > > >> >> >> > > > > > > > > > > > covers
> > > >> >> >> > > > > > > > > > > > > 1 and 2. KAFKA-3309 tracks
> documentation
> > > >> part.
> > > >> >> >> Yes,
> > > >> >> >> > we
> > > >> >> >> > > > > should
> > > >> >> >> > > > > > > > > include
> > > >> >> >> > > > > > > > > > > all
> > > >> >> >> > > > > > > > > > > > > the three points you mentioned while
> > > >> discussing
> > > >> >> or
> > > >> >> >> > > voting
> > > >> >> >> > > > > for
> > > >> >> >> > > > > > > > > KIP-35.
> > > >> >> >> > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > > > On Tue, Mar 1, 2016 at 5:25 PM,
> Ashish
> > > >> Singh <
> > > >> >> >> > > > > > > > > asi...@cloudera.com>
> > > >> >> >> > > > > > > > > > > > > wrote:
> > > >> >> >> > > > > > > > > > > > > > > On Tue, Mar 1, 2016 at 5:11 PM,
> Gwen
> > > >> >> Shapira <
> > > >> >> >> > > > > > > > > g...@confluent.io>
> > > >> >> >> > > > > > > > > > > > > wrote:
> > > >> >> >> > > > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > > > >> I don't see a use for the name -
> > > clients
> > > >> >> >> should
> > > >> >> >> > be
> > > >> >> >> > > > > able
> > > >> >> >> > > > > > to
> > > >> >> >> > > > > > > > > > > translate
> > > >> >> >> > > > > > > > > > > > > > >> ApiKey to name for any API they
> > > support,
> > > >> >> and
> > > >> >> >> I'm
> > > >> >> >> > > not
> > > >> >> >> > > > > > sure
> > > >> >> >> > > > > > > > why
> > > >> >> >> > > > > > > > > > > would
> > > >> >> >> > > > > > > > > > > > a
> > > >> >> >> > > > > > > > > > > > > > >> client need to log anything about
> > > APIs
> > > >> it
> > > >> >> >> does
> > > >> >> >> > not
> > > >> >> >> > > > > > > support.
> > > >> >> >> > > > > > > > > Am I
> > > >> >> >> > > > > > > > > > > > > > >> missing something?
> > > >> >> >> > > > > > > > > > > > > > >>
> > > >> >> >> > > > > > > > > > > > > > > Yea, it is a fair assumption that
> > > client
> > > >> >> would
> > > >> >> >> > know
> > > >> >> >> > > > > about
> > > >> >> >> > > > > > > > APIs
> > > >> >> >> > > > > > > > > it
> > > >> >> >> > > > > > > > > > > > > > supports.
> > > >> >> >> > > > > > > > > > > > > > > It could have been helpful for
> > client
> > > >> users
> > > >> >> to
> > > >> >> >> > see
> > > >> >> >> > > > new
> > > >> >> >> > > > > > APIs
> > > >> >> >> > > > > > > > > > though,
> > > >> >> >> > > > > > > > > > > > > > however
> > > >> >> >> > > > > > > > > > > > > > > users can always refer to protocol
> > > doc of
> > > >> >> new
> > > >> >> >> > > version
> > > >> >> >> > > > > to
> > > >> >> >> > > > > > > find
> > > >> >> >> > > > > > > > > > > > > > corresponding
> > > >> >> >> > > > > > > > > > > > > > > names of the new APIs.
> > > >> >> >> > > > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > > > >>
> > > >> >> >> > > > > > > > > > > > > > >> On a related note, Magnus is
> > > currently
> > > >> on
> > > >> >> >> > > vacation,
> > > >> >> >> > > > > but
> > > >> >> >> > > > > > he
> > > >> >> >> > > > > > > > > > should
> > > >> >> >> > > > > > > > > > > be
> > > >> >> >> > > > > > > > > > > > > > >> back at the end of next week. I'd
> > > like
> > > >> to
> > > >> >> >> hold
> > > >> >> >> > off
> > > >> >> >> > > > on
> > > >> >> >> > > > > > the
> > > >> >> >> > > > > > > > vote
> > > >> >> >> > > > > > > > > > > until
> > > >> >> >> > > > > > > > > > > > > > >> he gets back since his experience
> > in
> > > >> >> >> > implementing
> > > >> >> >> > > > > > clients
> > > >> >> >> > > > > > > > and
> > > >> >> >> > > > > > > > > > his
> > > >> >> >> > > > > > > > > > > > > > >> opinions will be very valuable
> for
> > > this
> > > >> >> >> > > discussion.
> > > >> >> >> > > > > > > > > > > > > > >>
> > > >> >> >> > > > > > > > > > > > > > > That is great. It will be valuable
> > to
> > > >> have
> > > >> >> his
> > > >> >> >> > > > > feedback.
> > > >> >> >> > > > > > I
> > > >> >> >> > > > > > > > will
> > > >> >> >> > > > > > > > > > > hold
> > > >> >> >> > > > > > > > > > > > > off
> > > >> >> >> > > > > > > > > > > > > > on
> > > >> >> >> > > > > > > > > > > > > > > removing "api_name" and
> > > >> >> >> "api_deprecated_versions"
> > > >> >> >> > > or
> > > >> >> >> > > > > > adding
> > > >> >> >> > > > > > > > > > release
> > > >> >> >> > > > > > > > > > > > > > version.
> > > >> >> >> > > > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > > > >>
> > > >> >> >> > > > > > > > > > > > > > >> Gwen
> > > >> >> >> > > > > > > > > > > > > > >>
> > > >> >> >> > > > > > > > > > > > > > >> On Tue, Mar 1, 2016 at 4:24 PM,
> > > Ashish
> > > >> >> Singh
> > > >> >> >> <
> > > >> >> >> > > > > > > > > > asi...@cloudera.com
> > > >> >> >> > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > > > wrote:
> > > >> >> >> > > > > > > > > > > > > > >> > Works with me. I will update PR
> > to
> > > >> remove
> > > >> >> >> > this.
> > > >> >> >> > > > > > > > > > > > > > >> >
> > > >> >> >> > > > > > > > > > > > > > >> > Also, "api_name" have been
> > pointed
> > > out
> > > >> >> as a
> > > >> >> >> > > > concern.
> > > >> >> >> > > > > > > > > However,
> > > >> >> >> > > > > > > > > > it
> > > >> >> >> > > > > > > > > > > > can
> > > >> >> >> > > > > > > > > > > > > > be
> > > >> >> >> > > > > > > > > > > > > > >> > handy for logging and similar
> > > >> purposes.
> > > >> >> Any
> > > >> >> >> > take
> > > >> >> >> > > > on
> > > >> >> >> > > > > > > that?
> > > >> >> >> > > > > > > > > > > > > > >> >
> > > >> >> >> > > > > > > > > > > > > > >> > On Tue, Mar 1, 2016 at 3:46 PM,
> > > Gwen
> > > >> >> >> Shapira <
> > > >> >> >> > > > > > > > > > g...@confluent.io
> > > >> >> >> > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > > > wrote:
> > > >> >> >> > > > > > > > > > > > > > >> >
> > > >> >> >> > > > > > > > > > > > > > >> >> Jay also mentioned:
> > > >> >> >> > > > > > > > > > > > > > >> >> "Or, alternately, since
> > > deprecation
> > > >> has
> > > >> >> no
> > > >> >> >> > > > > functional
> > > >> >> >> > > > > > > > > impact
> > > >> >> >> > > > > > > > > > > and
> > > >> >> >> > > > > > > > > > > > is
> > > >> >> >> > > > > > > > > > > > > > >> >> just a message
> > > >> >> >> > > > > > > > > > > > > > >> >> to developers, we could just
> > > leave it
> > > >> >> out
> > > >> >> >> of
> > > >> >> >> > > the
> > > >> >> >> > > > > > > protocol
> > > >> >> >> > > > > > > > > and
> > > >> >> >> > > > > > > > > > > > just
> > > >> >> >> > > > > > > > > > > > > > have
> > > >> >> >> > > > > > > > > > > > > > >> it
> > > >> >> >> > > > > > > > > > > > > > >> >> in release notes etc."
> > > >> >> >> > > > > > > > > > > > > > >> >>
> > > >> >> >> > > > > > > > > > > > > > >> >> I'm in favor of leaving it out
> > of
> > > the
> > > >> >> >> > > protocol. I
> > > >> >> >> > > > > > can't
> > > >> >> >> > > > > > > > > > really
> > > >> >> >> > > > > > > > > > > > see
> > > >> >> >> > > > > > > > > > > > > a
> > > >> >> >> > > > > > > > > > > > > > >> >> use-case.
> > > >> >> >> > > > > > > > > > > > > > >> >>
> > > >> >> >> > > > > > > > > > > > > > >> >> Gwen
> > > >> >> >> > > > > > > > > > > > > > >> >>
> > > >> >> >> > > > > > > > > > > > > > >> >> On Mon, Feb 29, 2016 at 3:55
> PM,
> > > >> Ashish
> > > >> >> >> > Singh <
> > > >> >> >> > > > > > > > > > > > asi...@cloudera.com
> > > >> >> >> > > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > > > >> wrote:
> > > >> >> >> > > > > > > > > > > > > > >> >>
> > > >> >> >> > > > > > > > > > > > > > >> >> > I hope it is OK for me to
> make
> > > some
> > > >> >> >> > progress
> > > >> >> >> > > > > here.
> > > >> >> >> > > > > > I
> > > >> >> >> > > > > > > > have
> > > >> >> >> > > > > > > > > > > made
> > > >> >> >> > > > > > > > > > > > > the
> > > >> >> >> > > > > > > > > > > > > > >> >> > following changes.
> > > >> >> >> > > > > > > > > > > > > > >> >> >
> > > >> >> >> > > > > > > > > > > > > > >> >> > 1. Updated KIP-35, to adopt
> > > Jay's
> > > >> >> >> > suggestion
> > > >> >> >> > > on
> > > >> >> >> > > > > > > > > maintaining
> > > >> >> >> > > > > > > > > > > > > > separate
> > > >> >> >> > > > > > > > > > > > > > >> list
> > > >> >> >> > > > > > > > > > > > > > >> >> > of deprecated versions,
> > instead
> > > of
> > > >> >> >> using a
> > > >> >> >> > > > > version
> > > >> >> >> > > > > > of
> > > >> >> >> > > > > > > > -1.
> > > >> >> >> > > > > > > > > > > > > > >> >> > 2. Added information on
> > required
> > > >> >> >> > permissions,
> > > >> >> >> > > > > > > Describe
> > > >> >> >> > > > > > > > > > action
> > > >> >> >> > > > > > > > > > > > on
> > > >> >> >> > > > > > > > > > > > > > >> Cluster
> > > >> >> >> > > > > > > > > > > > > > >> >> > resource, to be able to
> > retrieve
> > > >> >> >> protocol
> > > >> >> >> > > > > versions
> > > >> >> >> > > > > > > > from a
> > > >> >> >> > > > > > > > > > > auth
> > > >> >> >> > > > > > > > > > > > > > enabled
> > > >> >> >> > > > > > > > > > > > > > >> >> > Kafka cluster.
> > > >> >> >> > > > > > > > > > > > > > >> >> >
> > > >> >> >> > > > > > > > > > > > > > >> >> > Created
> > > >> >> >> > > > > > > >
> https://issues.apache.org/jira/browse/KAFKA-3304
> > > >> >> >> > > > > > > > > .
> > > >> >> >> > > > > > > > > > > > > Primary
> > > >> >> >> > > > > > > > > > > > > > >> patch
> > > >> >> >> > > > > > > > > > > > > > >> >> is
> > > >> >> >> > > > > > > > > > > > > > >> >> > available to review,
> > > >> >> >> > > > > > > > > > > https://github.com/apache/kafka/pull/986
> > > >> >> >> > > > > > > > > > > > > > >> >> >
> > > >> >> >> > > > > > > > > > > > > > >> >> > On Thu, Feb 25, 2016 at 1:27
> > PM,
> > > >> >> Ashish
> > > >> >> >> > > Singh <
> > > >> >> >> > > > > > > > > > > > > asi...@cloudera.com
> > > >> >> >> > > > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > > > >> >> wrote:
> > > >> >> >> > > > > > > > > > > > > > >> >> >
> > > >> >> >> > > > > > > > > > > > > > >> >> > > Kafka clients in Hadoop
> > > >> ecosystem,
> > > >> >> >> Flume,
> > > >> >> >> > > > > Spark,
> > > >> >> >> > > > > > > etc,
> > > >> >> >> > > > > > > > > > have
> > > >> >> >> > > > > > > > > > > > > found
> > > >> >> >> > > > > > > > > > > > > > it
> > > >> >> >> > > > > > > > > > > > > > >> >> > really
> > > >> >> >> > > > > > > > > > > > > > >> >> > > difficult to cope up with
> > > Kafka
> > > >> >> >> releases
> > > >> >> >> > as
> > > >> >> >> > > > > they
> > > >> >> >> > > > > > > want
> > > >> >> >> > > > > > > > > to
> > > >> >> >> > > > > > > > > > > > > support
> > > >> >> >> > > > > > > > > > > > > > >> users
> > > >> >> >> > > > > > > > > > > > > > >> >> on
> > > >> >> >> > > > > > > > > > > > > > >> >> > > different Kafka versions.
> > > >> Capability
> > > >> >> >> to
> > > >> >> >> > > > > retrieve
> > > >> >> >> > > > > > > > > protocol
> > > >> >> >> > > > > > > > > > > > > version
> > > >> >> >> > > > > > > > > > > > > > >> will
> > > >> >> >> > > > > > > > > > > > > > >> >> > go a
> > > >> >> >> > > > > > > > > > > > > > >> >> > > long way to ease out those
> > > pain
> > > >> >> >> points. I
> > > >> >> >> > > > will
> > > >> >> >> > > > > be
> > > >> >> >> > > > > > > > happy
> > > >> >> >> > > > > > > > > > to
> > > >> >> >> > > > > > > > > > > > help
> > > >> >> >> > > > > > > > > > > > > > out
> > > >> >> >> > > > > > > > > > > > > > >> >> with
> > > >> >> >> > > > > > > > > > > > > > >> >> > > the work on this KIP.
> > @Magnus,
> > > >> >> thanks
> > > >> >> >> for
> > > >> >> >> > > > > driving
> > > >> >> >> > > > > > > > this,
> > > >> >> >> > > > > > > > > > is
> > > >> >> >> > > > > > > > > > > it
> > > >> >> >> > > > > > > > > > > > > OK
> > > >> >> >> > > > > > > > > > > > > > if
> > > >> >> >> > > > > > > > > > > > > > >> I
> > > >> >> >> > > > > > > > > > > > > > >> >> > carry
> > > >> >> >> > > > > > > > > > > > > > >> >> > > forward the work from
> here.
> > It
> > > >> will
> > > >> >> be
> > > >> >> >> > > ideal
> > > >> >> >> > > > to
> > > >> >> >> > > > > > > have
> > > >> >> >> > > > > > > > > this
> > > >> >> >> > > > > > > > > > > in
> > > >> >> >> > > > > > > > > > > > > > >> 0.10.0.0.
> > > >> >> >> > > > > > > > > > > > > > >> >> > >
> > > >> >> >> > > > > > > > > > > > > > >> >> > > On Mon, Oct 12, 2015 at
> 9:29
> > > PM,
> > > >> Jay
> > > >> >> >> > Kreps
> > > >> >> >> > > <
> > > >> >> >> > > > > > > > > > > j...@confluent.io
> > > >> >> >> > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > > > >> wrote:
> > > >> >> >> > > > > > > > > > > > > > >> >> > >
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> I wonder if we need to
> > solve
> > > the
> > > >> >> >> error
> > > >> >> >> > > > > problem?
> > > >> >> >> > > > > > I
> > > >> >> >> > > > > > > > > think
> > > >> >> >> > > > > > > > > > > this
> > > >> >> >> > > > > > > > > > > > > KIP
> > > >> >> >> > > > > > > > > > > > > > >> >> gives a
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> descent work around.
> > > >> >> >> > > > > > > > > > > > > > >> >> > >>
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> Probably we should have
> > > >> included an
> > > >> >> >> > error
> > > >> >> >> > > in
> > > >> >> >> > > > > the
> > > >> >> >> > > > > > > > > > response
> > > >> >> >> > > > > > > > > > > > > > header,
> > > >> >> >> > > > > > > > > > > > > > >> but
> > > >> >> >> > > > > > > > > > > > > > >> >> we
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> debated it at the time
> > > decided
> > > >> not
> > > >> >> to
> > > >> >> >> > and
> > > >> >> >> > > > now
> > > >> >> >> > > > > it
> > > >> >> >> > > > > > > is
> > > >> >> >> > > > > > > > > > pretty
> > > >> >> >> > > > > > > > > > > > > hard
> > > >> >> >> > > > > > > > > > > > > > to
> > > >> >> >> > > > > > > > > > > > > > >> add
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> because the headers
> aren't
> > > >> >> versioned
> > > >> >> >> > > (d'oh).
> > > >> >> >> > > > > > > > > > > > > > >> >> > >>
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> It seems like any other
> > > >> solution is
> > > >> >> >> > going
> > > >> >> >> > > to
> > > >> >> >> > > > > be
> > > >> >> >> > > > > > > kind
> > > >> >> >> > > > > > > > > of
> > > >> >> >> > > > > > > > > > a
> > > >> >> >> > > > > > > > > > > > > hack,
> > > >> >> >> > > > > > > > > > > > > > >> right?
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> Sending malformed
> responses
> > > back
> > > >> >> >> seems
> > > >> >> >> > > like
> > > >> >> >> > > > > not
> > > >> >> >> > > > > > a
> > > >> >> >> > > > > > > > > clean
> > > >> >> >> > > > > > > > > > > > > > solution...
> > > >> >> >> > > > > > > > > > > > > > >> >> > >>
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> (Not sure if I was pro-
> > > having a
> > > >> >> >> > top-level
> > > >> >> >> > > > > error
> > > >> >> >> > > > > > > or
> > > >> >> >> > > > > > > > > not,
> > > >> >> >> > > > > > > > > > > but
> > > >> >> >> > > > > > > > > > > > > in
> > > >> >> >> > > > > > > > > > > > > > any
> > > >> >> >> > > > > > > > > > > > > > >> >> case
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> the rationale for the
> > > decision
> > > >> was
> > > >> >> >> that
> > > >> >> >> > so
> > > >> >> >> > > > > many
> > > >> >> >> > > > > > of
> > > >> >> >> > > > > > > > the
> > > >> >> >> > > > > > > > > > > > > requests
> > > >> >> >> > > > > > > > > > > > > > >> were
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> per-partition or
> per-topic
> > or
> > > >> >> >> whatever
> > > >> >> >> > and
> > > >> >> >> > > > > hence
> > > >> >> >> > > > > > > > fail
> > > >> >> >> > > > > > > > > or
> > > >> >> >> > > > > > > > > > > > > > succeed at
> > > >> >> >> > > > > > > > > > > > > > >> >> that
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> level and this makes it
> > hard
> > > to
> > > >> >> know
> > > >> >> >> > what
> > > >> >> >> > > > the
> > > >> >> >> > > > > > > right
> > > >> >> >> > > > > > > > > > > > top-level
> > > >> >> >> > > > > > > > > > > > > > error
> > > >> >> >> > > > > > > > > > > > > > >> >> code
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> is
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> and hard for the client
> to
> > > >> figure
> > > >> >> out
> > > >> >> >> > what
> > > >> >> >> > > > to
> > > >> >> >> > > > > do
> > > >> >> >> > > > > > > > with
> > > >> >> >> > > > > > > > > > the
> > > >> >> >> > > > > > > > > > > > top
> > > >> >> >> > > > > > > > > > > > > > level
> > > >> >> >> > > > > > > > > > > > > > >> >> > error
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> if some of the partitions
> > > >> succeed
> > > >> >> but
> > > >> >> >> > > there
> > > >> >> >> > > > > is a
> > > >> >> >> > > > > > > > > > top-level
> > > >> >> >> > > > > > > > > > > > > > error).
> > > >> >> >> > > > > > > > > > > > > > >> >> > >>
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> I think actually this new
> > API
> > > >> >> >> actually
> > > >> >> >> > > > gives a
> > > >> >> >> > > > > > way
> > > >> >> >> > > > > > > > to
> > > >> >> >> > > > > > > > > > > handle
> > > >> >> >> > > > > > > > > > > > > > this
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> gracefully on the client
> > > side by
> > > >> >> just
> > > >> >> >> > > having
> > > >> >> >> > > > > > > clients
> > > >> >> >> > > > > > > > > > that
> > > >> >> >> > > > > > > > > > > > want
> > > >> >> >> > > > > > > > > > > > > > to
> > > >> >> >> > > > > > > > > > > > > > >> be
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> graceful check for
> support
> > > for
> > > >> >> their
> > > >> >> >> > > > version.
> > > >> >> >> > > > > > > > Clients
> > > >> >> >> > > > > > > > > > that
> > > >> >> >> > > > > > > > > > > > do
> > > >> >> >> > > > > > > > > > > > > > that
> > > >> >> >> > > > > > > > > > > > > > >> >> will
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> have a graceful message.
> > > >> >> >> > > > > > > > > > > > > > >> >> > >>
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> At some point if we're
> ever
> > > >> >> reworking
> > > >> >> >> > the
> > > >> >> >> > > > > > headers
> > > >> >> >> > > > > > > we
> > > >> >> >> > > > > > > > > > > should
> > > >> >> >> > > > > > > > > > > > > > really
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> consider
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> (a) versioning them and
> (b)
> > > >> adding
> > > >> >> a
> > > >> >> >> > > > top-level
> > > >> >> >> > > > > > > error
> > > >> >> >> > > > > > > > > > code
> > > >> >> >> > > > > > > > > > > in
> > > >> >> >> > > > > > > > > > > > > the
> > > >> >> >> > > > > > > > > > > > > > >> >> > response.
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> But given this would be a
> > big
> > > >> >> >> breaking
> > > >> >> >> > > > change
> > > >> >> >> > > > > > and
> > > >> >> >> > > > > > > > this
> > > >> >> >> > > > > > > > > > is
> > > >> >> >> > > > > > > > > > > > > really
> > > >> >> >> > > > > > > > > > > > > > >> just
> > > >> >> >> > > > > > > > > > > > > > >> >> to
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> give a nicer error
> message
> > > seems
> > > >> >> >> like it
> > > >> >> >> > > > > > probably
> > > >> >> >> > > > > > > > > isn't
> > > >> >> >> > > > > > > > > > > > worth
> > > >> >> >> > > > > > > > > > > > > > it to
> > > >> >> >> > > > > > > > > > > > > > >> >> try
> > > >> >> >> > > > > > > > > > > > > > >> >> > to
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> do something now.
> > > >> >> >> > > > > > > > > > > > > > >> >> > >>
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> -Jay
> > > >> >> >> > > > > > > > > > > > > > >> >> > >>
> > > >> >> >> > > > > > > > > > > > > > >> >> > >>
> > > >> >> >> > > > > > > > > > > > > > >> >> > >>
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> On Mon, Oct 12, 2015 at
> > 8:11
> > > PM,
> > > >> >> >> > Jiangjie
> > > >> >> >> > > > Qin
> > > >> >> >> > > > > > > > > > > > > > >> >> <j...@linkedin.com.invalid
> > > >> >> >> > > > > > > > > > > > > > >> >> > >
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> wrote:
> > > >> >> >> > > > > > > > > > > > > > >> >> > >>
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > I am thinking instead
> of
> > > >> >> returning
> > > >> >> >> an
> > > >> >> >> > > > empty
> > > >> >> >> > > > > > > > > response,
> > > >> >> >> > > > > > > > > > it
> > > >> >> >> > > > > > > > > > > > > > would be
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> better to
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > return an explicit
> > > >> >> >> > > > > UnsupportedVersionException
> > > >> >> >> > > > > > > > code.
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> >
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > Today KafkaApis handles
> > the
> > > >> error
> > > >> >> >> in
> > > >> >> >> > the
> > > >> >> >> > > > > > > following
> > > >> >> >> > > > > > > > > > way:
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > 1. For
> requests/responses
> > > >> using
> > > >> >> old
> > > >> >> >> > > Scala
> > > >> >> >> > > > > > > classes,
> > > >> >> >> > > > > > > > > > > > KafkaApis
> > > >> >> >> > > > > > > > > > > > > > uses
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> >
> > > >> RequestOrResponse.handleError()
> > > >> >> to
> > > >> >> >> > > return
> > > >> >> >> > > > an
> > > >> >> >> > > > > > > error
> > > >> >> >> > > > > > > > > > > > response.
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > 2. For
> requests/response
> > > using
> > > >> >> Java
> > > >> >> >> > > > classes
> > > >> >> >> > > > > > > (only
> > > >> >> >> > > > > > > > > > > > > > >> JoinGroupRequest
> > > >> >> >> > > > > > > > > > > > > > >> >> and
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > Heartbeat now),
> KafkaApis
> > > >> calls
> > > >> >> >> > > > > > > > > > > > > > >>
> AbstractRequest.getErrorResponse()
> > > >> >> >> > > > > > > > > > > > > > >> >> to
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > return an error
> response.
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> >
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > In KAFKA-2512, I am
> > > returning
> > > >> an
> > > >> >> >> > > > > > > > > > > > UnsupportedVersionException
> > > >> >> >> > > > > > > > > > > > > > for
> > > >> >> >> > > > > > > > > > > > > > >> >> case
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> [1]
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > when see an unsupported
> > > >> version.
> > > >> >> >> This
> > > >> >> >> > > will
> > > >> >> >> > > > > put
> > > >> >> >> > > > > > > the
> > > >> >> >> > > > > > > > > > error
> > > >> >> >> > > > > > > > > > > > > code
> > > >> >> >> > > > > > > > > > > > > > per
> > > >> >> >> > > > > > > > > > > > > > >> >> > topic
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> or
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > partition for most of
> the
> > > >> >> requests,
> > > >> >> >> > but
> > > >> >> >> > > > > might
> > > >> >> >> > > > > > > not
> > > >> >> >> > > > > > > > > work
> > > >> >> >> > > > > > > > > > > all
> > > >> >> >> > > > > > > > > > > > > the
> > > >> >> >> > > > > > > > > > > > > > >> time.
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> e.g.
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > TopicMetadataRequest
> with
> > > an
> > > >> >> empty
> > > >> >> >> > topic
> > > >> >> >> > > > > set.
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> >
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > Case [2] does not quite
> > > work
> > > >> for
> > > >> >> >> > > > unsupported
> > > >> >> >> > > > > > > > > version,
> > > >> >> >> > > > > > > > > > > > > because
> > > >> >> >> > > > > > > > > > > > > > we
> > > >> >> >> > > > > > > > > > > > > > >> >> will
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > thrown an uncaught
> > > exception
> > > >> when
> > > >> >> >> > > version
> > > >> >> >> > > > is
> > > >> >> >> > > > > > not
> > > >> >> >> > > > > > > > > > > > recognized
> > > >> >> >> > > > > > > > > > > > > > (BTW
> > > >> >> >> > > > > > > > > > > > > > >> >> this
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> is a
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > bug). Part of the
> reason
> > is
> > > >> that
> > > >> >> >> for
> > > >> >> >> > > some
> > > >> >> >> > > > > > > response
> > > >> >> >> > > > > > > > > > > types,
> > > >> >> >> > > > > > > > > > > > > > error
> > > >> >> >> > > > > > > > > > > > > > >> code
> > > >> >> >> > > > > > > > > > > > > > >> >> > is
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> not
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > part of the response
> > level
> > > >> field.
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> >
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > Maybe it worth checking
> > how
> > > >> each
> > > >> >> >> > > response
> > > >> >> >> > > > is
> > > >> >> >> > > > > > > > dealing
> > > >> >> >> > > > > > > > > > > with
> > > >> >> >> > > > > > > > > > > > > > error
> > > >> >> >> > > > > > > > > > > > > > >> code
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> today.
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > A scan of the response
> > > formats
> > > >> >> >> gives
> > > >> >> >> > the
> > > >> >> >> > > > > > > following
> > > >> >> >> > > > > > > > > > > result:
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > 1.
> TopicMetadataResponse
> > -
> > > per
> > > >> >> >> topic
> > > >> >> >> > > error
> > > >> >> >> > > > > > code,
> > > >> >> >> > > > > > > > > does
> > > >> >> >> > > > > > > > > > > not
> > > >> >> >> > > > > > > > > > > > > work
> > > >> >> >> > > > > > > > > > > > > > >> when
> > > >> >> >> > > > > > > > > > > > > > >> >> > the
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > topic set is empty in
> the
> > > >> >> request.
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > 2. ProduceResonse - per
> > > >> partition
> > > >> >> >> > error
> > > >> >> >> > > > > code.
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > 3.
> OffsetCommitResponse -
> > > per
> > > >> >> >> > partition.
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > 4. OffsetFetchResponse
> -
> > > per
> > > >> >> >> > partition.
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > 5. OffsetResponse - per
> > > >> >> partition.
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > 6. FetchResponse - per
> > > >> partition
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > 7.
> > > ConsumerMetadataResponse -
> > > >> >> >> response
> > > >> >> >> > > > level
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > 8.
> > > ControlledShutdownResponse
> > > >> -
> > > >> >> >> > response
> > > >> >> >> > > > > level
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > 9. JoinGroupResponse -
> > > >> response
> > > >> >> >> level
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > 10. HearbeatResponse -
> > > >> response
> > > >> >> >> level
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > 11.
> LeaderAndIsrResponse
> > -
> > > >> >> response
> > > >> >> >> > > level
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > 12.
> StopReplicaResponse -
> > > >> >> response
> > > >> >> >> > level
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > 13.
> > UpdateMetadataResponse
> > > -
> > > >> >> >> response
> > > >> >> >> > > > level
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> >
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > So from the list above
> it
> > > >> looks
> > > >> >> for
> > > >> >> >> > each
> > > >> >> >> > > > > > > response
> > > >> >> >> > > > > > > > we
> > > >> >> >> > > > > > > > > > are
> > > >> >> >> > > > > > > > > > > > > > actually
> > > >> >> >> > > > > > > > > > > > > > >> >> able
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> to
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > return an error code,
> as
> > > long
> > > >> as
> > > >> >> we
> > > >> >> >> > make
> > > >> >> >> > > > > sure
> > > >> >> >> > > > > > > the
> > > >> >> >> > > > > > > > > > topic
> > > >> >> >> > > > > > > > > > > or
> > > >> >> >> > > > > > > > > > > > > > >> partition
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> won't
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > be empty when the error
> > > code
> > > >> is
> > > >> >> at
> > > >> >> >> > topic
> > > >> >> >> > > > or
> > > >> >> >> > > > > > > > > partition
> > > >> >> >> > > > > > > > > > > > level.
> > > >> >> >> > > > > > > > > > > > > > >> Luckily
> > > >> >> >> > > > > > > > > > > > > > >> >> > in
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> the
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > above list we only need
> > to
> > > >> worry
> > > >> >> >> about
> > > >> >> >> > > > > > > > > > > > > TopicMetadataResponse.
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> >
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > Maybe error handling is
> > > out of
> > > >> >> the
> > > >> >> >> > scope
> > > >> >> >> > > > of
> > > >> >> >> > > > > > this
> > > >> >> >> > > > > > > > > KIP,
> > > >> >> >> > > > > > > > > > > but
> > > >> >> >> > > > > > > > > > > > I
> > > >> >> >> > > > > > > > > > > > > > >> prefer
> > > >> >> >> > > > > > > > > > > > > > >> >> we
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> think
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > through how to deal
> with
> > > error
> > > >> >> code
> > > >> >> >> > for
> > > >> >> >> > > > the
> > > >> >> >> > > > > > > > > requests,
> > > >> >> >> > > > > > > > > > > > > because
> > > >> >> >> > > > > > > > > > > > > > >> there
> > > >> >> >> > > > > > > > > > > > > > >> >> > are
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > more request types to
> be
> > > >> added in
> > > >> >> >> > > > KAFKA-2464
> > > >> >> >> > > > > > and
> > > >> >> >> > > > > > > > > > future
> > > >> >> >> > > > > > > > > > > > > > patches.
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> >
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > Thanks,
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> >
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > Jiangjie (Becket) Qin
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> >
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > On Mon, Oct 12, 2015 at
> > > 6:04
> > > >> PM,
> > > >> >> >> Jay
> > > >> >> >> > > > Kreps <
> > > >> >> >> > > > > > > > > > > > > j...@confluent.io>
> > > >> >> >> > > > > > > > > > > > > > >> >> wrote:
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> >
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > > Two quick pieces of
> > > >> feedback:
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > > 1. The use of a
> version
> > > of
> > > >> -1
> > > >> >> as
> > > >> >> >> > > magical
> > > >> >> >> > > > > > entry
> > > >> >> >> > > > > > > > > > > dividing
> > > >> >> >> > > > > > > > > > > > > > between
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > deprecated
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > > versions is a bit
> > hacky.
> > > >> What
> > > >> >> >> about
> > > >> >> >> > > > > instead
> > > >> >> >> > > > > > > > having
> > > >> >> >> > > > > > > > > > an
> > > >> >> >> > > > > > > > > > > > > array
> > > >> >> >> > > > > > > > > > > > > > of
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> supported
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > > versions and a
> separate
> > > >> array
> > > >> >> of
> > > >> >> >> > > > > deprecated
> > > >> >> >> > > > > > > > > > versions.
> > > >> >> >> > > > > > > > > > > > The
> > > >> >> >> > > > > > > > > > > > > > >> >> deprecated
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > > versions would always
> > be
> > > a
> > > >> >> >> subset of
> > > >> >> >> > > the
> > > >> >> >> > > > > > > > supported
> > > >> >> >> > > > > > > > > > > > > versions.
> > > >> >> >> > > > > > > > > > > > > > >> Or,
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > > alternately, since
> > > >> deprecation
> > > >> >> >> has
> > > >> >> >> > no
> > > >> >> >> > > > > > > functional
> > > >> >> >> > > > > > > > > > > impact
> > > >> >> >> > > > > > > > > > > > > and
> > > >> >> >> > > > > > > > > > > > > > is
> > > >> >> >> > > > > > > > > > > > > > >> >> just
> > > >> >> >> > > > > > > > > > > > > > >> >> > a
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > > message to
> developers,
> > we
> > > >> could
> > > >> >> >> just
> > > >> >> >> > > > leave
> > > >> >> >> > > > > > it
> > > >> >> >> > > > > > > > out
> > > >> >> >> > > > > > > > > of
> > > >> >> >> > > > > > > > > > > the
> > > >> >> >> > > > > > > > > > > > > > >> protocol
> > > >> >> >> > > > > > > > > > > > > > >> >> > and
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > just
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > > have it in release
> > notes
> > > >> etc.
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > > 2. I think including
> > the
> > > api
> > > >> >> name
> > > >> >> >> > may
> > > >> >> >> > > > > cause
> > > >> >> >> > > > > > > some
> > > >> >> >> > > > > > > > > > > > problems.
> > > >> >> >> > > > > > > > > > > > > > >> >> Currently
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> the
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > > api key is the
> primary
> > > key
> > > >> that
> > > >> >> >> we
> > > >> >> >> > > keep
> > > >> >> >> > > > > > > > consistent
> > > >> >> >> > > > > > > > > > but
> > > >> >> >> > > > > > > > > > > > we
> > > >> >> >> > > > > > > > > > > > > > have
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> actually
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > > evolved the english
> > > >> description
> > > >> >> >> of
> > > >> >> >> > the
> > > >> >> >> > > > > apis
> > > >> >> >> > > > > > as
> > > >> >> >> > > > > > > > > they
> > > >> >> >> > > > > > > > > > > have
> > > >> >> >> > > > > > > > > > > > > > >> changed.
> > > >> >> >> > > > > > > > > > > > > > >> >> > The
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > only
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > > use I can think of
> for
> > > the
> > > >> name
> > > >> >> >> > would
> > > >> >> >> > > be
> > > >> >> >> > > > > if
> > > >> >> >> > > > > > > > people
> > > >> >> >> > > > > > > > > > > used
> > > >> >> >> > > > > > > > > > > > > the
> > > >> >> >> > > > > > > > > > > > > > >> >> logical
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> name
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > > and tried to resolve
> > the
> > > api
> > > >> >> key,
> > > >> >> >> > but
> > > >> >> >> > > > that
> > > >> >> >> > > > > > > would
> > > >> >> >> > > > > > > > > be
> > > >> >> >> > > > > > > > > > > > wrong.
> > > >> >> >> > > > > > > > > > > > > > Not
> > > >> >> >> > > > > > > > > > > > > > >> >> sure
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> if we
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > > actually need the
> > english
> > > >> name,
> > > >> >> >> if
> > > >> >> >> > > there
> > > >> >> >> > > > > is
> > > >> >> >> > > > > > a
> > > >> >> >> > > > > > > > use
> > > >> >> >> > > > > > > > > > > case I
> > > >> >> >> > > > > > > > > > > > > > guess
> > > >> >> >> > > > > > > > > > > > > > >> >> we'll
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> just
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > > have to be very clear
> > > that
> > > >> the
> > > >> >> >> name
> > > >> >> >> > is
> > > >> >> >> > > > > just
> > > >> >> >> > > > > > > > > > > > documentation
> > > >> >> >> > > > > > > > > > > > > > and
> > > >> >> >> > > > > > > > > > > > > > >> can
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> change
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > > any time.
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > >
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > > -Jay
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > >
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > > 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
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > > >
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> > >
> > > >> >> >> > > > > > > > > > > > > > >> >> > >> >
> > > >> >> >> > > > > > > > > > > > > > >> >> > >>
> > > >> >> >> > > > > > > > > > > > > > >> >> > >
> > > >> >> >> > > > > > > > > > > > > > >> >> > >
> > > >> >> >> > > > > > > > > > > > > > >> >> > >
> > > >> >> >> > > > > > > > > > > > > > >> >> > > --
> > > >> >> >> > > > > > > > > > > > > > >> >> > >
> > > >> >> >> > > > > > > > > > > > > > >> >> > > Regards,
> > > >> >> >> > > > > > > > > > > > > > >> >> > > Ashish
> > > >> >> >> > > > > > > > > > > > > > >> >> > >
> > > >> >> >> > > > > > > > > > > > > > >> >> >
> > > >> >> >> > > > > > > > > > > > > > >> >> >
> > > >> >> >> > > > > > > > > > > > > > >> >> >
> > > >> >> >> > > > > > > > > > > > > > >> >> > --
> > > >> >> >> > > > > > > > > > > > > > >> >> >
> > > >> >> >> > > > > > > > > > > > > > >> >> > Regards,
> > > >> >> >> > > > > > > > > > > > > > >> >> > Ashish
> > > >> >> >> > > > > > > > > > > > > > >> >> >
> > > >> >> >> > > > > > > > > > > > > > >> >>
> > > >> >> >> > > > > > > > > > > > > > >> >
> > > >> >> >> > > > > > > > > > > > > > >> >
> > > >> >> >> > > > > > > > > > > > > > >> >
> > > >> >> >> > > > > > > > > > > > > > >> > --
> > > >> >> >> > > > > > > > > > > > > > >> >
> > > >> >> >> > > > > > > > > > > > > > >> > Regards,
> > > >> >> >> > > > > > > > > > > > > > >> > Ashish
> > > >> >> >> > > > > > > > > > > > > > >>
> > > >> >> >> > > > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > > > > --
> > > >> >> >> > > > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > > > > Regards,
> > > >> >> >> > > > > > > > > > > > > > > Ashish
> > > >> >> >> > > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > > --
> > > >> >> >> > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > > > Regards,
> > > >> >> >> > > > > > > > > > > > > Ashish
> > > >> >> >> > > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > > >
> > > >> >> >> > > > > > > > > > >
> > > >> >> >> > > > > > > > > >
> > > >> >> >> > > > > > > > >
> > > >> >> >> > > > > > > >
> > > >> >> >> > > > > > >
> > > >> >> >> > > > > >
> > > >> >> >> > > > > >
> > > >> >> >> > > > > >
> > > >> >> >> > > > > > --
> > > >> >> >> > > > > >
> > > >> >> >> > > > > > Regards,
> > > >> >> >> > > > > > Ashish
> > > >> >> >> > > > > >
> > > >> >> >> > > > >
> > > >> >> >> > > >
> > > >> >> >> > >
> > > >> >> >> >
> > > >> >> >> >
> > > >> >> >> >
> > > >> >> >> > --
> > > >> >> >> >
> > > >> >> >> > Regards,
> > > >> >> >> > Ashish
> > > >> >> >> >
> > > >> >> >>
> > > >> >> >
> > > >> >> >
> > > >> >> >
> > > >> >> > --
> > > >> >> >
> > > >> >> > Regards,
> > > >> >> > Ashish
> > > >> >> >
> > > >> >>
> > > >> >>
> > > >> >>
> > > >> >> --
> > > >> >>
> > > >> >> Regards,
> > > >> >> Ashish
> > > >> >>
> > > >>
> > >
> >
>
>
>
> --
>
> Regards,
> Ashish
>

Reply via email to