I've got a very strange bug doing a long poll using SimpleConsumer on 0.8.1.1. 
The test app I've got (attached) uses a thread to do a long poll of a topic, 
and then sends single messages to that queue, one at a time, waiting for the 
poll to return the message before sending the next one.

The problem is that when a message is sent to the queue, the long poll returns 
immediately, but that does not contain the just-sent message. So the long poll 
restarts. Sometime this second poll returns immediately with the sent message, 
but sometimes it waits for the poll to timeout before returning the message. 
This second behaviour happens much more on a replicated topic, but is also 
reproducible with the test VMs on https://github.com/stealthly/scala-kafka.

A sample log file is below. The long poll timeout is 5000ms. Messages 1 and 2 
are delayed, messages 0 and 2 aren't. Every message requires two polls to 
actually be received:

410 [pool-1-thread-1] INFO Making request from offset 110
1457 [main] INFO Sending 0
1553 [pool-1-thread-1] WARN Received no messages
1553 [pool-1-thread-1] INFO Making request from offset 110
1560 [pool-1-thread-1] INFO Received 0
1561 [pool-1-thread-1] INFO Making request from offset 111
1561 [main] INFO Got response for 0 in 20ms
1561 [main] INFO Sending 1
1565 [pool-1-thread-1] WARN Received no messages
1565 [pool-1-thread-1] INFO Making request from offset 111
6567 [pool-1-thread-1] INFO Received 1
6567 [pool-1-thread-1] INFO Making request from offset 112
6568 [main] INFO Got response for 1 in 5004ms
6568 [main] INFO Sending 2
6574 [pool-1-thread-1] WARN Received no messages
6574 [pool-1-thread-1] INFO Making request from offset 112
11577 [pool-1-thread-1] INFO Received 2
11577 [pool-1-thread-1] INFO Making request from offset 113
11578 [main] INFO Got response for 2 in 5006ms
11578 [main] INFO Sending 3
11584 [pool-1-thread-1] WARN Received no messages
11584 [pool-1-thread-1] INFO Making request from offset 113
11585 [pool-1-thread-1] INFO Received 3
11586 [pool-1-thread-1] INFO Making request from offset 114
11586 [main] INFO Got response for 3 in 5ms

Ideally, the message sent would be returned immediately by the first long poll. 
But the obvious bug is the artificial delay introduced by the message not being 
returned until the long poll times out, when it should return immediately (as 
the minimum message size is 1 byte, and there's a 4 byte message available).

This looks like a bug in kafka, but I may be using the consumer API 
incorrectly...

Thanks,
SimonC

Reply via email to