apache-kafkakafka-producer-apikafka-partition

Is a write to a Kafka topic only successful if write on each partition's replicas is successful?


Is a write to a Kafka topic only successful if the write on each partition's replicas is successful? Or is there a quorum that could be configured?

Suppose you have

  1. Producer
  2. Server1 with Topic1 Partition1(Leader)
  3. Server2 with Topic1 Partition1(Replica)
  4. Server3 with Topic1 Partition1(Replica)

Producer writes to Topic1. Is it a rule the message is stored only if an acknowlegment is received from Leader and both Replicas? Or is it possible to configure a quorum: only leader?


Solution

  • If I understand your questions correctly you are looking for the configuration of the Producer API called acks.

    acks: The number of acknowledgments the producer requires the leader to have received before considering a request complete. This controls the durability of records that are sent. The following settings are allowed:

    acks=0 If set to zero then the producer will not wait for any acknowledgment from the server at all. The record will be immediately added to the socket buffer and considered sent. No guarantee can be made that the server has received the record in this case, and the retries configuration will not take effect (as the client won't generally know of any failures). The offset given back for each record will always be set to -1.

    acks=1 This will mean the leader will write the record to its local log but will respond without awaiting full acknowledgement from all followers. In this case should the leader fail immediately after acknowledging the record but before the followers have replicated it then the record will be lost.

    acks=all This means the leader will wait for the full set of in-sync replicas to acknowledge the record. This guarantees that the record will not be lost as long as at least one in-sync replica remains alive. This is the strongest available guarantee. This is equivalent to the acks=-1 setting.

    Type: stringDefault: 1Valid Values: [all, -1, 0, 1]Importance: high

    Check documentation for Producer API for more details.