Hello,

I am running kafka 0.7.1 and try to make mirroring works accross DC.
It usually works well when mirroring a single topic.
However I have noticed that when I am not limiting the number of topics, the 
mirrormaker hangs with an InvalidRequestException :
-xxxx is not a valid request size

This is thrown by the BoundedByteBufferReceive class  
(https://github.com/apache/kafka/blob/0.7.1/core/src/main/scala/kafka/network/BoundedByteBufferReceive.scala#L60)
 when the announced size of the MultiFetchRequest response has an negative size.

This is due to an overflow on server side :
https://github.com/apache/kafka/blob/0.7.1/core/src/main/scala/kafka/server/MultiMessageSetSend.scala#L30

Indeed while server respect the fetchsize (in my case 100mb), it send fetchsize 
per topic per partition. Since this is unbounded, this might (and does) 
overflow.

This bug seems to be present also in 0.8 : 
https://github.com/apache/kafka/blob/0.8/core/src/main/scala/kafka/api/FetchResponse.scala#L171
 (even if I have not tested it yet).


A quick work-around for me would be to decrease fetchsize (using the number of 
topics and the number of partition I expect). However this does not scale up 
because the number of partitions and topics are not known when configuring the 
mirrormaker.

Can we think of a solution to fix this ? Either by taking the fetchsize as a 
hint  (maybe dropping some data if the data size sum overflows) and to take the 
fetch size as a global limit (not per topic per partition).

--
Grégoire



Reply via email to