Which statement best describes at-most-once delivery semantics in Kafka?
Think about what happens if a message fails to be processed or acknowledged.
At-most-once delivery means messages can be lost but never duplicated. Kafka sends messages without retrying on failure, so a message might be delivered zero or one time.
Given the following Kafka producer configuration snippet, what is the expected delivery guarantee?
props.put("enable.idempotence", "false");
props.put("acks", "0");
props.put("retries", 0);What is the expected behavior?
Consider what disabling idempotence and setting acks to 0 means.
With acks=0, the producer does not wait for any acknowledgment, and with retries=0 and idempotence disabled, messages may be lost but will not be duplicated, matching at-most-once semantics.
Consider this Kafka consumer code snippet:
consumer.subscribe(List.of("topic"));
while (true) {
var records = consumer.poll(Duration.ofMillis(100));
for (var record : records) {
System.out.println(record.value());
}
consumer.commitSync();
}If the commitSync() call is moved before processing the records, what delivery guarantee does this provide?
Think about what happens if the consumer crashes after committing but before processing.
Committing offsets before processing means if the consumer crashes after commit but before processing, messages are lost, so at-most-once delivery is achieved.
What error will this Kafka producer code cause?
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("acks", "0");
props.put("enable.idempotence", "true");
props.put("retries", 0);
KafkaProducer<String, String> producer = new KafkaProducer<>(props);
producer.send(new ProducerRecord<>("topic", "key", "value"));
producer.close();Check Kafka producer configuration rules for idempotence.
Enabling idempotence requires retries to be greater than zero. Setting retries to 0 with idempotence enabled causes an IllegalArgumentException.
You want to implement a Kafka consumer that guarantees at-most-once delivery. Which of the following code snippets correctly implements this behavior?
Remember that committing offsets before processing leads to at-most-once delivery.
Option A commits offsets before processing, so if the consumer crashes after commit but before processing, messages are lost, ensuring at-most-once delivery.