FYI there is already https://issues.apache.org/jira/browse/KAFKA-1768
Otis -- Monitoring * Alerting * Anomaly Detection * Centralized Log Management Solr & Elasticsearch Support * http://sematext.com/ On Sat, Nov 15, 2014 at 10:45 AM, Joe Stein <joe.st...@stealth.ly> wrote: > Agreed. We can have the response be the list of all brokers and each the > current version. Also an option to single broker just for that brokers > version. On start up the broker can register with meta data store > (zookeeper for now) their current version using one of the mentioned > gathered info. > > Something like that, yeah. > > I will create the JIRA when I get back to computer desk later today. > > > /******************************************* > Joe Stein > Founder, Principal Consultant > Big Data Open Source Security LLC > http://www.stealth.ly > Twitter: @allthingshadoop > ********************************************/ > On Nov 15, 2014 9:42 AM, "Jeff Holoman" <jholo...@cloudera.com> wrote: > > > Seems like this aspect of Daniel's request could (would be) included here > > pretty easily: > > > > > > > https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Command+Line+and+Related+Improvements > > > > Jeff > > > > On Sat, Nov 15, 2014 at 3:29 AM, Daniel Compton <d...@danielcompton.net> > > wrote: > > > > > This has been covered in passing in the preceding threads but I'd like > to > > > make it explicit, can we have a command line option/script for getting > > the > > > Kafka version (probably with Scala version too)? > > > > > > I ran into this recently, where we wanted to verify that the right > > version > > > of Kafka had been installed on a number of machines. I ended up getting > > the > > > version number from the bundled jars but it wasn't ideal. Being able to > > run > > > kafka --version would have been great. > > > > > > --- > > > Daniel > > > > > > > On 15/11/2014, at 8:33 am, Magnus Edenhill <mag...@edenhill.se> > wrote: > > > > > > > > Hi Gwen, > > > > > > > > the protocol version in an InfoResponse message would be the maximum > > > > supported mainline protocol version, each change to the > > > > effective protocol specification bumps the version by one. > > > > > > > > > > > > The current per-request-type version ID is unfortunately useless to > the > > > > client, it only allows the broker to act differently > > > > on different versions of a known request type. > > > > > > > > Since the broker currently does not handle unknown request types > > > gracefully > > > > - it simply disconnects the client, which from the client's > perspective > > > > could mean anything and nothing - the addition of an > > InfoRequest/Respones > > > > would allow the client to know if a desired broker-feature is > available > > > or > > > > not and thus allows the client library to provide the application > (and > > in > > > > the end the user) with usable error message (compare "Broker > > > disconnected" > > > > to "offsetCommit not supported by 0.8.0 broker"). > > > > Having the broker return a fabricated response with the header.err > > field > > > > set to UNKNOWN_REQUEST_TYPE would be very useful as well of course. > > > > > > > > > > > > Regards, > > > > Magnus > > > > > > > > > > > > > > > > 2014-11-14 18:17 GMT+01:00 Gwen Shapira <gshap...@cloudera.com>: > > > > > > > >> 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 > > > >> > > > > > > > > > > > -- > > Jeff Holoman > > Systems Engineer > > 678-612-9519 > > >