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