Kafka Exactly Once Semantics (EOS) Interview Questions and Answers
Learn Kafka Exactly Once Semantics (EOS) with interview questions, Mermaid diagrams, Spring Boot examples, Kafka transactions, idempotent producers, transactional consumers, and enterprise production best practices.
Kafka Exactly Once Semantics (EOS) - Interview Questions & Answers
One of the biggest improvements introduced in Apache Kafka is Exactly Once Semantics (EOS).
Before Kafka 0.11, applications commonly experienced:
- Duplicate Events
- Lost Messages
- Partial Processing
- Offset Commit Problems
Kafka EOS introduced:
- Idempotent Producers
- Transactions
- Transactional Consumers
- Read Committed Isolation
These features allow Kafka applications to build highly reliable event-driven systems.
Exactly Once Semantics are heavily used in:
- Banking
- Payment Systems
- Stock Trading
- Insurance
- Healthcare
- Financial Applications
Kafka Exactly Once Architecture
flowchart LR
Producer --> KafkaTransaction["Kafka Transaction"]
KafkaTransaction["Kafka Transaction"] --> KafkaTopic["Kafka Topic"]
KafkaTopic["Kafka Topic"] --> TransactionalConsumer["Transactional Consumer"]
TransactionalConsumer["Transactional Consumer"] --> Database
Database --> OffsetCommit["Offset Commit"]
Q1. What is Kafka Exactly Once Semantics (EOS)?
Answer
Exactly Once Semantics (EOS) ensures that a record is:
- Produced once
- Stored once
- Consumed once
- Processed once
within Kafka's transactional boundaries.
EOS prevents duplicate records caused by producer retries and consumer failures.
Processing Flow
flowchart TD
Producer --> Kafka
Kafka --> Consumer
Consumer --> Database
Database --> CommitOffset["Commit Offset"]
Q2. Why was Exactly Once introduced in Kafka?
Answer
Without EOS:
- Producer retries could create duplicate events.
- Consumer crashes could reprocess records.
- Offset commits could become inconsistent.
These issues caused duplicate business operations.
Without EOS
flowchart LR
Producer --> Kafka
Kafka --> Consumer
Consumer --> Database
Consumer --> Retry
Retry --> DuplicateProcessing["Duplicate Processing"]
With EOS
flowchart LR
Producer --> Transaction
Transaction --> Kafka
Kafka --> TransactionalConsumer["Transactional Consumer"]
TransactionalConsumer["Transactional Consumer"] --> Database
Q3. What is an Idempotent Producer?
Answer
An Idempotent Producer guarantees that retrying the same message does not create duplicate records inside Kafka.
Kafka internally assigns:
- Producer ID (PID)
- Sequence Numbers
Duplicate records are automatically ignored.
Producer Flow
flowchart TD
Producer --> Retry
Retry --> Kafka
Kafka --> SingleRecord["Single Record"]
Configuration
enable.idempotence=true
Interview Tip
Idempotent Producer eliminates duplicate records inside Kafka, not duplicate business processing.
Q4. What are Kafka Transactions?
Answer
Kafka Transactions allow multiple records and offset commits to be treated as one atomic unit.
Either:
- Everything commits
or
- Everything rolls back
Transaction Flow
flowchart LR
BeginTransaction["Begin Transaction"] --> PublishEvents["Publish Events"]
PublishEvents["Publish Events"] --> CommitTransaction["Commit Transaction"]
CommitTransaction["Commit Transaction"] --> VisibleToConsumers["Visible to Consumers"]
Benefits
- Atomic writes
- Atomic offset commits
- Reliable event processing
Q5. What is a Transactional Consumer?
Answer
A Transactional Consumer processes records and commits offsets within the same transaction.
Workflow:
- Read records
- Process business logic
- Commit database
- Commit Kafka offsets
If processing fails:
- Offsets are not committed.
- Records are retried safely.
Consumer Workflow
flowchart TD
Kafka --> Consumer
Consumer --> BusinessLogic["Business Logic"]
BusinessLogic["Business Logic"] --> Database
Database --> CommitOffset["Commit Offset"]
Q6. What is read_committed isolation?
Answer
Kafka consumers support two isolation levels.
read_uncommitted
Reads all records.
Including uncommitted transactions.
read_committed
Reads only committed transactions.
Recommended for production.
Isolation
flowchart LR
Kafka --> CommittedRecords["Committed Records"]
Kafka --> UncommittedRecords["Uncommitted Records"]
CommittedRecords["Committed Records"] --> Consumer
UncommittedRecords["Uncommitted Records"] --> Ignored
Configuration
isolation.level=read_committed
Q7. How does Spring Boot implement Kafka EOS?
Answer
Spring Boot integrates Kafka EOS using:
- Spring Kafka
- KafkaTransactionManager
- @Transactional
- Idempotent Producers
Typical flow:
REST API
↓
Kafka Producer
↓
Kafka Transaction
↓
Consumer
↓
Database
Spring Boot Architecture
flowchart TD
RestApi["REST API"] --> SpringBoot["Spring Boot"]
SpringBoot["Spring Boot"] --> KafkaProducer["Kafka Producer"]
KafkaProducer["Kafka Producer"] --> KafkaCluster["Kafka Cluster"]
KafkaCluster["Kafka Cluster"] --> TransactionalConsumer["Transactional Consumer"]
TransactionalConsumer["Transactional Consumer"] --> Database
Q8. What are common Kafka EOS mistakes?
Answer
Common mistakes include:
- Assuming EOS removes the need for idempotency.
- Ignoring database duplicates.
- Using read_uncommitted.
- No retry strategy.
- No DLQ.
- Forgetting transaction IDs.
- Not monitoring transaction failures.
Wrong Design
Kafka EOS
↓
Duplicate Payment Impossible ❌
Correct Design
Kafka EOS
+
Idempotent Consumer
+
Database Constraint
=
Reliable Processing ✅
Q9. What are the limitations of Kafka EOS?
Answer
Kafka EOS guarantees exactly-once inside Kafka transactions.
It does not automatically protect:
- External Databases
- REST APIs
- Payment Gateways
- Third-party Services
Applications still require:
- Idempotency
- Outbox Pattern
- Saga Pattern
Scope
flowchart LR
KafkaTransaction["Kafka Transaction"] --> Kafka
Kafka --> Consumer
Consumer --> ExternalDatabase["External Database"]
ExternalDatabase["External Database"] --> ApplicationLogic["Application Logic"]
Best Practice
Always combine Kafka EOS with application-level duplicate protection.
Q10. What are the enterprise best practices for Kafka EOS?
Answer
Follow these recommendations:
- Enable idempotent producers.
- Use Kafka transactions.
- Configure transactional consumers.
- Use
read_committed. - Implement idempotent consumers.
- Store processed event IDs.
- Configure retries and DLQs.
- Monitor transaction failures.
- Combine with the Outbox Pattern.
- Test failure scenarios regularly.
Enterprise Architecture
flowchart TD
RestApi["REST API"] --> OrderService["Order Service"]
OrderService["Order Service"] --> KafkaTransaction["Kafka Transaction"]
KafkaTransaction["Kafka Transaction"] --> KafkaCluster["Kafka Cluster"]
KafkaCluster["Kafka Cluster"] --> TransactionalConsumer["Transactional Consumer"]
TransactionalConsumer["Transactional Consumer"] --> DuplicateCheck["Duplicate Check"]
DuplicateCheck["Duplicate Check"] --> Database
TransactionalConsumer["Transactional Consumer"] --> DLQ
Processing Pipeline
flowchart LR
Producer --> Transaction
Transaction --> Kafka
Kafka --> Consumer
Consumer --> Database
Database --> OffsetCommit["Offset Commit"]
Kafka EOS Overview
mindmap
root((Kafka EOS))
Idempotent Producer
Transactions
Transactional Consumer
Read Committed
Retry
DLQ
Outbox
Monitoring
Kafka Delivery Guarantees
| Feature | At Most Once | At Least Once | Kafka EOS |
|---|---|---|---|
| Duplicate Messages | No | Possible | Prevented in Kafka |
| Message Loss | Possible | No | No |
| Transactions | No | No | Yes |
| Producer Retry Safe | No | No | Yes |
| Offset Commit | Simple | After Processing | Transactional |
| Enterprise Usage | Low | High | Critical Systems |
Banking Example
A customer transfers ₹50,000.
Transfer Request
↓
Kafka Producer
↓
Kafka Transaction
↓
Consumer
↓
Database Updated
↓
Offset Committed
↓
Consumer Crash
↓
No Duplicate Processing
The transaction remains consistent because Kafka commits both the message and offset atomically.
Senior Interview Tip
Kafka Exactly Once Semantics are not a complete business solution.
EOS protects message processing inside Kafka.
Enterprise systems still require:
- Idempotent Consumers
- Outbox Pattern
- Saga Pattern
- Database Constraints
- Replay Services
- Dead Letter Queues
A production-ready Kafka platform typically includes:
- Spring Boot
- Spring Kafka
- Kafka Transactions
- Idempotent Producers
- Transactional Consumers
- Read Committed Isolation
- Outbox Pattern
- DLQ
- Retry Topics
- Replay Services
- Schema Registry
- Prometheus & Grafana
- OpenTelemetry
- Audit Logging
Remember:
- Idempotent Producer prevents duplicate records in Kafka.
- Kafka Transactions provide atomic writes and offset commits.
- Transactional Consumers safely commit offsets.
- Application-level idempotency is still required for external systems.
Quick Revision
- Kafka EOS provides reliable message processing within Kafka.
- Enable
enable.idempotence=truefor idempotent producers. - Use Kafka transactions for atomic writes.
- Configure transactional consumers.
- Set
isolation.level=read_committedin production. - Kafka EOS does not eliminate the need for idempotent consumers.
- Combine Kafka EOS with the Outbox Pattern and Saga Pattern.
- Configure retries, DLQs, and replay mechanisms.
- Monitor transaction failures and consumer lag.
- Combine Kafka transactions, Spring Boot, idempotency, monitoring, and replay for enterprise-grade exactly-once event processing.