I'm not sure there's a single "protocol version". Each
request/response has its own version ID embedded in the request
itself.

Broker version, broker ID and (as Joel suggested) git hash are all
reasonable. And +1 for adding this to API to support non-JVM clients.

Gwen

On Fri, Nov 14, 2014 at 8:46 AM, Magnus Edenhill <mag...@edenhill.se> wrote:
> Please let's not add dependencies on more third party protocols/software,
> the move away from Zookeeper dependence on the clients is very much welcomed
> and it'd be a pity to see a new foreign dependency added for such a trivial
> thing
> as propagating the version of a broker to its client.
>
> My suggestion is to add a new protocol request which returns:
>  - broker version
>  - protocol version
>  - broker id
>
> A generic future-proof solution would be the use of tags (or named TLVs):
> InfoResponse: [InfoTag]
> InfoTag:
>    intX tag      ( KAFKA_TAG_BROKER_VERSION, KAFKA_TAG_PROTO_VERSION,
> KAFKA_TAG_SSL, ... )
>    intX type    ( KAFKA_TYPE_STR, KAFKA_TYPE_INT32, KAFKA_TYPE_INT64, ...)
>    intX len
>    bytes payload
>
> Local site/vendor tags could be defined in the configuration file,
>
>
> This would also allow clients to enable/disable features based on protocol
> version,
> e.g., there is no point in trying offsetCommit on a 0.8.0 broker and the
> client library
> can inform the application about this early, rather than having its
> offsetCommit requests
> fail by connection teardown (which is not much of an error propagation).
>
>
> My two cents,
> Magnus
>
>
> 2014-11-12 20:11 GMT+01:00 Mark Roberts <wiz...@gmail.com>:
>
>> I haven't worked much with JMX before, but some quick googling (10-20
>> minutes) is very inconclusive as to how I would go about getting the server
>> version I'm connecting to from a Python client.  Can someone please
>> reassure me that it's relatively trivial for non Java clients to query JMX
>> for the server version of every server in the cluster? Is there a reason
>> not to include this in the API itself?
>>
>> -Mark
>>
>> On Wed, Nov 12, 2014 at 9:50 AM, Joel Koshy <jjkosh...@gmail.com> wrote:
>>
>> > +1 on the JMX + gradle properties. Is there any (seamless) way of
>> > including the exact git hash? That would be extremely useful if users
>> > need help debugging and happen to be on an unreleased build (say, off
>> > trunk)
>> >
>> > On Wed, Nov 12, 2014 at 09:34:35AM -0800, Gwen Shapira wrote:
>> > > Actually, Jun suggested exposing this via JMX.
>> > >
>> > > On Wed, Nov 12, 2014 at 9:31 AM, Gwen Shapira <gshap...@cloudera.com>
>> > wrote:
>> > >
>> > > > Good question.
>> > > >
>> > > > The server will need to expose this in the protocol, so Kafka clients
>> > will
>> > > > know what they are talking to.
>> > > >
>> > > > We may also want to expose this in the producer and consumer, so
>> people
>> > > > who use Kafka's built-in clients will know which version they have in
>> > the
>> > > > environment.
>> > > >
>> > > >
>> > > >
>> > > > On Wed, Nov 12, 2014 at 9:09 AM, Mark Roberts <wiz...@gmail.com>
>> > wrote:
>> > > >
>> > > >> Just to be clear: this is going to be exposed via some Api the
>> clients
>> > > >> can call at startup?
>> > > >>
>> > > >>
>> > > >> > On Nov 12, 2014, at 08:59, Guozhang Wang <wangg...@gmail.com>
>> > wrote:
>> > > >> >
>> > > >> > Sounds great, +1 on this.
>> > > >> >
>> > > >> >> On Tue, Nov 11, 2014 at 1:36 PM, Gwen Shapira <
>> > gshap...@cloudera.com>
>> > > >> wrote:
>> > > >> >>
>> > > >> >> So it looks like we can use Gradle to add properties to manifest
>> > file
>> > > >> and
>> > > >> >> then use getResourceAsStream to read the file and parse it.
>> > > >> >>
>> > > >> >> The Gradle part would be something like:
>> > > >> >> jar.manifest {
>> > > >> >>            attributes('Implementation-Title': project.name,
>> > > >> >>            'Implementation-Version': project.version,
>> > > >> >>            'Built-By': System.getProperty('user.name'),
>> > > >> >>            'Built-JDK': System.getProperty('java.version'),
>> > > >> >>            'Built-Host': getHostname(),
>> > > >> >>            'Source-Compatibility': project.sourceCompatibility,
>> > > >> >>            'Target-Compatibility': project.targetCompatibility
>> > > >> >>            )
>> > > >> >>        }
>> > > >> >>
>> > > >> >> The code part would be:
>> > > >> >>
>> > > >> >>
>> > > >>
>> >
>> this.getClass().getClassLoader().getResourceAsStream("/META-INF/MANIFEST.MF")
>> > > >> >>
>> > > >> >> Does that look like the right approach?
>> > > >> >>
>> > > >> >> Gwen
>> > > >> >>
>> > > >> >> On Tue, Nov 11, 2014 at 10:43 AM, Bhavesh Mistry <
>> > > >> >> mistry.p.bhav...@gmail.com
>> > > >> >>> wrote:
>> > > >> >>
>> > > >> >>> If is maven artifact then you will get following pre-build
>> > property
>> > > >> file
>> > > >> >>> from maven build called pom.properties under
>> > > >> >>> /META-INF/maven/groupid/artifactId/pom.properties folder.
>> > > >> >>>
>> > > >> >>> Here is sample:
>> > > >> >>> #Generated by Maven
>> > > >> >>> #Mon Oct 10 10:44:31 EDT 2011
>> > > >> >>> version=10.0.1
>> > > >> >>> groupId=com.google.guava
>> > > >> >>> artifactId=guava
>> > > >> >>>
>> > > >> >>> Thanks,
>> > > >> >>>
>> > > >> >>> Bhavesh
>> > > >> >>>
>> > > >> >>> On Tue, Nov 11, 2014 at 10:34 AM, Gwen Shapira <
>> > gshap...@cloudera.com
>> > > >> >
>> > > >> >>> wrote:
>> > > >> >>>
>> > > >> >>>> In Sqoop we do the following:
>> > > >> >>>>
>> > > >> >>>> Maven runs a shell script, passing the version as a parameter.
>> > > >> >>>> The shell-script generates a small java class, which is then
>> > built
>> > > >> >> with a
>> > > >> >>>> Maven plugin.
>> > > >> >>>> Our code references this generated class when we expose
>> > > >> "getVersion()".
>> > > >> >>>>
>> > > >> >>>> Its complex and ugly, so I'm kind of hoping that there's a
>> > better way
>> > > >> >> to
>> > > >> >>> do
>> > > >> >>>> it :)
>> > > >> >>>>
>> > > >> >>>> Gwen
>> > > >> >>>>
>> > > >> >>>>> On Tue, Nov 11, 2014 at 9:42 AM, Jun Rao <jun...@gmail.com>
>> > wrote:
>> > > >> >>>>>
>> > > >> >>>>> Currently, the version number is only stored in our build
>> config
>> > > >> >> file,
>> > > >> >>>>> gradle.properties. Not sure how we can automatically extract
>> it
>> > and
>> > > >> >>>> expose
>> > > >> >>>>> it in an mbean. How do other projects do this?
>> > > >> >>>>>
>> > > >> >>>>> Thanks,
>> > > >> >>>>>
>> > > >> >>>>> Jun
>> > > >> >>>>>
>> > > >> >>>>> On Tue, Nov 11, 2014 at 7:05 AM, Otis Gospodnetic <
>> > > >> >>>>> otis.gospodne...@gmail.com> wrote:
>> > > >> >>>>>
>> > > >> >>>>>> Hi Jun,
>> > > >> >>>>>>
>> > > >> >>>>>> Sounds good.  But is the version number stored anywhere from
>> > where
>> > > >> >> it
>> > > >> >>>>> could
>> > > >> >>>>>> be gotten?
>> > > >> >>>>>>
>> > > >> >>>>>> Thanks,
>> > > >> >>>>>> Otis
>> > > >> >>>>>> --
>> > > >> >>>>>> Monitoring * Alerting * Anomaly Detection * Centralized Log
>> > > >> >>> Management
>> > > >> >>>>>> Solr & Elasticsearch Support * http://sematext.com/
>> > > >> >>>>>>
>> > > >> >>>>>>
>> > > >> >>>>>> On Tue, Nov 11, 2014 at 12:45 AM, Jun Rao <jun...@gmail.com>
>> > > >> >> wrote:
>> > > >> >>>>>>
>> > > >> >>>>>>> Otis,
>> > > >> >>>>>>>
>> > > >> >>>>>>> We don't have an api for that now. We can probably expose
>> this
>> > > >> >> as a
>> > > >> >>>> JMX
>> > > >> >>>>>> as
>> > > >> >>>>>>> part of kafka-1481.
>> > > >> >>>>>>>
>> > > >> >>>>>>> Thanks,
>> > > >> >>>>>>>
>> > > >> >>>>>>> Jun
>> > > >> >>>>>>>
>> > > >> >>>>>>> On Mon, Nov 10, 2014 at 7:17 PM, Otis Gospodnetic <
>> > > >> >>>>>>> otis.gospodne...@gmail.com> wrote:
>> > > >> >>>>>>>
>> > > >> >>>>>>>> Hi,
>> > > >> >>>>>>>>
>> > > >> >>>>>>>> Is there a way to detect which version of Kafka one is
>> > running?
>> > > >> >>>>>>>> Is there an API for that, or a constant with this value, or
>> > > >> >> maybe
>> > > >> >>>> an
>> > > >> >>>>>>> MBean
>> > > >> >>>>>>>> or some other way to get to this info?
>> > > >> >>>>>>>>
>> > > >> >>>>>>>> Thanks,
>> > > >> >>>>>>>> Otis
>> > > >> >>>>>>>> --
>> > > >> >>>>>>>> Monitoring * Alerting * Anomaly Detection * Centralized Log
>> > > >> >>>>> Management
>> > > >> >>>>>>>> Solr & Elasticsearch Support * http://sematext.com/
>> > > >> >
>> > > >> >
>> > > >> >
>> > > >> > --
>> > > >> > -- Guozhang
>> > > >>
>> > > >
>> > > >
>> >
>> >
>>

Reply via email to