Hi all,

I'm working on my own kafka client implementation and I noticed strange
situation.

Time(s) | Action
0.0    MetadataRequest
0.0    MetadataResponse
0.2    OffsetRequest
0.2    OffsetResponse
0.3    FetchRequest(MaxWaitTime=20sec)
6.0    ProduceRequest
31.0  FetchResponse
^^^^ notice 25sec gap!
31.0  ProduceResponse

What is important, it seems to me that Fetch Request with long poll will
block processing of all following requests for the duration of timeout,
given that there is no new data. But new data *are* flowing in and Produce
Request is waiting right behind the Fetch one in server side processing
queue.

If what I describe is correct then I see the following problems.
1. From client's point of view, if they have a listener and a sender, then
sending data should produce immediate event on listener.

2. If I want clean shutdown of my application within 5sec, but my listeners
are configured with 20sec timeout, than I am risking losing the data. My
application shutdown time now becomes at least as long as listener's
pooling time, which is unreasonable.

I do understand why it was implemented that way, probably because of the
specification saying
====
"The server guarantees that on a single TCP connection, requests will be
processed in the order they are sent and responses will return in that
order as well"
====
But to achieve proper functioning of the client, I need to allocate another
tcp connection for listeners now?

Also, I'm aware about new protocol proposal for the next version of Kafka,
would this issue be resolved there?

Thanks,
Vadim.

-- 
>From RFC 2631: In ASN.1, EXPLICIT tagging is implicit unless IMPLICIT is
explicitly specified

Reply via email to