We ran into similar difficulties, both when trying to get Kafka to use
new APIs when available and when testing the wire protocol.

+1 for all three suggestions.

#1 sounds like the bare minimum, but I'm not sure how much it will
complicate the clients (now we expect either a response or an Unknown
message and need to be able to distinguish between them from the byte
array).

#2 and #3 both makes lots of sense.

Gwen


On Mon, Jan 12, 2015 at 1:15 PM, Dana Powers <dana.pow...@rd.io> wrote:
> Hi all -- continuing on the compatibility discussion:
>
> I've found that it is very difficult to identify when a server does not
> recognize an api
> (I'm using kafka-python to submit wire-protocol requests).  For example,
> when I
> send a ConsumerMetadataRequest to an 0.8.1.1 server, I get a closed socket
> *[stacktrace below].  The server raises an error internally, but does not
> send any
> meaningful response.  I'm not sure whether this is the intended behavior,
> but
> maintaining clients in an ecosystem of multiple server versions with
> different API
> support it would be great to have a way to determine what the server
> supports
> and what it does not.
>
> Some suggestions:
>
> (1) An UnknownAPIResponse that is returned for any API or API Version
> request
> that is unsupported.
>
> (2) A server metadata API to get the list of supported APIs and/or API
> versions supported.
>
> (3) A server metadata API to get the published version of the server (0.8.2
> v. 0.8.1.1, etc).
>
>
> Thoughts?
>
>
> Dana Powers
> Rdio, Inc.
> dana.pow...@rd.io
> rdio.com/people/dpkp/
>
> *stacktrace:
> ```
> [2015-01-12 13:03:55,719] ERROR Closing socket for /127.0.0.1 because of
> error (kafka.network.Processor)
> kafka.common.KafkaException: Wrong request type 10
>    at kafka.api.RequestKeys$.deserializerForKey(RequestKeys.scala:57)
>    at kafka.network.RequestChannel$Request.<init>(RequestChannel.scala:53)
>    at kafka.network.Processor.read(SocketServer.scala:353)
>    at kafka.network.Processor.run(SocketServer.scala:245)
>    at java.lang.Thread.run(Thread.java:722)
> ```

Reply via email to