I have a question related to the semantics of a producer send and the get calls 
on the future returned by the send call.

- It is a Java application, using the Kafka Java client library
- The application is set up to use 3 replicas and using acks=all for the 
producer
- the application is using a non-zero value for linger.ms and batch.size 
parameters
- The application is using a single non-transactional Kafka producer instance, 
shared across a number of threads

With that,

- Any application thread makes a send() call on the producer.
- Then the same thread calls get() on the future returned by the last send() 
call
- The get() call on the future returns after it gets the acknowledgement from 
the system for the message send

At this point, is it guaranteed that the message has actually been written (but 
may not be committed by calling fsync) to ALL of the replicas’ filesystems?

Sincerely,
Anindya Haldar
Oracle Responsys

Reply via email to