Jay Kreps created KAFKA-659:
-------------------------------

             Summary: Support request pipelining in the network server
                 Key: KAFKA-659
                 URL: https://issues.apache.org/jira/browse/KAFKA-659
             Project: Kafka
          Issue Type: New Feature
            Reporter: Jay Kreps


Currently the network layer in kafka will only process a single request at a 
time from a given connection. The protocol is designed to allow pipelining of 
requests which would improve latency.

There are two changes that would have to made for this to work, in my 
understanding:
1. Currently once a completed request is read from a socket the server does not 
register for "read interest" again until a response is sent. The server would 
have to register for read interest immediately to allow reading more requests.
2. Currently the socket server adds all requests to a single "request channel" 
that serves as a work queue for all the background i/o threads. One requirement 
for Kafka is to do in order processing of requests from a given socket. This is 
currently achieved by not reading any new requests from a socket until the 
currently outstanding request is processed. To maintain this guarantee we would 
have to guarantee that all requests from a particular socket went to the same 
I/O thread. A simple way to do this would be to have work queue per I/O thread. 
One downside of this is that pinning requests to I/O threads will add latency 
variance--if that thread stalls due to a slow I/O no other thread can pick up 
the slack. So perhaps there is a better way that isn't overly complex?

Would be good to nail down the design for this as a first step.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to