> Does this mean that when a client is sending more than one in-flight > request per connection, the server does not guarantee that responses will > be sent in the same order as requests?
No - the server does provide this guarantee - i.e., responses will always be sent in the same order as requests received on the same TCP connection. *"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."* The subsequent statements just describe how this is achieved (i.e., we process only one request at a time in the API handlers). On Thu, Feb 18, 2016 at 5:59 AM, Ivan Dyachkov <i...@dyachkov.org> wrote: > Thanks Ben. > > As I mentioned, I'm developing a kafka library and not using standard java > producer. > > My question is really about protocol guarantees. > > /Ivan > > ----- Original message ----- > From: Ben Stopford <b...@confluent.io> > To: users@kafka.apache.org > Subject: Re: Kafka response ordering guarantees > Date: Wed, 17 Feb 2016 14:48:59 -0800 > > So long as you set max.inflight.requests.per.connection = 1 Kafka should > provide strong ordering within a partition (so use the same key for > messages that should retain their order). There is a bug currently raised > agaisnt this feature though where there is an edge case that can cause > ordering issues. > > https://issues.apache.org/jira/browse/KAFKA-3197 > > On 17 Feb 2016, at 07:17, Ivan Dyachkov <d...@dyachkov.org> wrote: > > > > Hello all. > > > > I'm developing a kafka client and have a question about kafka server > guarantees. > > > > A statement from > https://cwiki.apache.org/confluence/display/KAFKA/A+Guide+To+The+Kafka+Protocol#AGuideToTheKafkaProtocol-Network > makes me a bit confused: > > > > "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. The broker's request processing allows only a single > in-flight request per connection in order to guarantee this ordering. Note > that clients can (and ideally should) use non-blocking IO to implement > request pipelining and achieve higher throughput. i.e., clients can send > requests even while awaiting responses for preceding requests since the > outstanding requests will be buffered in the underlying OS socket buffer. > All requests are initiated by the client, and result in a corresponding > response message from the server except where noted." > > > > Does this mean that when a client is sending more than one in-flight > request per connection, the server does not guarantee that responses will > be sent in the same order as requests? > > > > In other words, if I have a strictly monotonically increasing integer as > a correlation id for all requests, can I rely on Kafka that correlation id > in responses will also have this property? > > > > Thanks. > > > > /Ivan > >