Hello Kafka Devs,

I've been testing the upgrade procedure between Kafka 0.8.2.1 and Kafka 0.9.0.0 
and have been having Replication issues between the two version, and I was 
wondering if anyone was aware of this issue (I just searched and this seems to 
be related to KAFKA-2750 raised yesterday ).

I start with 3 brokers running 0.8.2.1 all that contain data (1 topic with 10 
partitions), then I shut down one of the brokers, upgrade it to 0.9.0 (making 
sure to set 'inter.broker.protocol.version=0.8.2.X' in broker.properties).  
Once the Broker is started I see errors like the following:

[2015-11-05 19:13:10,309] WARN [ReplicaFetcherThread-0-182050600], Error in 
fetch 
kafka.server.ReplicaFetcherThread$FetchRequest@6cc18858<mailto:kafka.server.ReplicaFetcherThread$FetchRequest@6cc18858>.
 Possible cause: org.apache.kafka.common.protocol.types.SchemaException: Error 
reading field 'responses': Error reading field 'topic': 
java.nio.BufferUnderflowException (kafka.server.ReplicaFetcherThread)
And
[2015-11-03 16:55:15,178] WARN [ReplicaFetcherThread-1-182050600], Error in 
fetch 
kafka.server.ReplicaFetcherThread$FetchRequest@224388b2<mailto:kafka.server.ReplicaFetcherThread$FetchRequest@224388b2>.
 Possible cause: org.apache.kafka.common.protocol.types.SchemaException: Error 
reading field 'responses': Error reading field 'partition_responses': Error 
reading field 'record_set': java.lang.IllegalArgumentException 
(kafka.server.ReplicaFetcherThread)


I've spent some time in the Kafka code, and packet captures/wireshark trying to 
figure this out, and I believe there is an issue in 
org.apache.kafka.clients.networkClient.java in the handleCompletedReceives 
function:
When extracting the response body, this function is using 
ProtoUtils.currentResponseSchema instead of ProtoUtils.ResponseSchema  and 
specifying the API version required by inter.broker.protocol.version.
                                Struct body = (Struct) 
ProtoUtils.currentResponseSchema(apiKey).read(receive.payload());

This results in errors when the newer version of a Schema (FETCH_RESPONSE_V1 
instead of FETCH_RESPONSE_V0) is applied against the fetch response returned by 
the 0.8.2.1 broker


Thanks,
Matthew Bruce
mbr...@blackberry.com<mailto:mbr...@blackberry.com>

Reply via email to