Mark,
For non-Java clients an option could be to expose JMX via REST API using
Jolokia as an adapter. This may be helpful:
http://stackoverflow.com/questions/5106847/access-jmx-agents-from-non-java-clients

Joel,
I'm not familiar with Kafka build infrastructure, but e. g. Jenkins can
easily propagate Git commit hash it's building to the build runtime using a
predefined build parameter, GIT_COMMIT. Most likely there is a similar
option in other CI tools. This value can then be put into a properties
file. E. g. Maven can do this using resource filtering mechanism. I believe
Gradle should be even more flexible in this regard.
For non-CI builds things are more tricky, but the idea might be to read git
CLI output. This command would give the "current" commit hash: "git
rev-parse HEAD" which again can be passed to the build runtime using a
property/parameter. Here I make an assumption that Git is installed on the
build machine, but this will hold true in most cases I can imagine.

- Yury

2014-11-12 22:11 GMT+03: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