Skip to content

Widhian Bramantya

coding is an art form

Menu
  • About Me
Menu
kafka

Delivery Semantics in Kafka: At Most Once, At Least Once, Exactly Once

Posted on September 22, 2025September 22, 2025 by admin

When working with Apache Kafka, one of the most important questions is:
How many times can a message be delivered to a consumer?

This is called delivery semantics. Kafka supports three modes: at most once, at least once, and exactly once.

1. At Most Once

  • Meaning: Each message is delivered 0 or 1 time.
  • If there is a failure, the message may be lost.
  • No duplicates, but risk of data loss.

How it happens:

  • Consumer commits the offset before processing the message.
  • If processing fails, Kafka thinks it’s done and skips it.

Example:

  • A payment system that commits offset before charging the customer.
  • If the app crashes, the payment message is lost and never retried.

Benefits

  • Fastest performance (low overhead).
  • No duplicates ever appear.
  • Simpler logic for consumers.

Drawbacks

  • Risk of data loss if a failure happens after offset commit but before processing.
  • Not safe for critical workflows.

Use Case:

  • OK for non-critical data like metrics, logs, or monitoring signals.

2. At Least Once

  • Meaning: Each message is delivered 1 or more times.
  • No data loss, but there can be duplicates.

How it happens:

  • Consumer commits the offset after processing the message.
  • If processing succeeds but commit fails, the same message will be reprocessed.

Example:

  • A billing system charges a customer and then crashes before committing.
  • On restart, it charges again → duplicate billing.

Benefits

  • No message loss (every message is eventually processed).
  • Default and safest option in most Kafka clients.

Drawbacks

  • Duplicates may occur if the same message is processed multiple times.
  • Requires idempotent consumers (processing must handle duplicates safely, e.g., avoid double-charging).
See also  Producers and Consumers: How Data Flows in Kafka

Use Case:

  • Most common in Kafka.
  • Safe for critical data if your processing is idempotent (can handle duplicates safely).
Pages: 1 2
Category: Kafka

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Linkedin

Widhian Bramantya

Recent Posts

  • Implementing the Outbox Pattern with Debezium
  • Production-Grade Debezium Connector with Kafka (Postgres Outbox Example – E-Commerce Orders)
  • Connecting Debezium with Kafka for Real-Time Streaming
  • Debezium Architecture – How It Works and Core Components
  • What is Debezium? – An Introduction to Change Data Capture
  • Offset Management and Consumer Groups in Kafka
  • Partitions, Replication, and Fault Tolerance in Kafka
  • Delivery Semantics in Kafka: At Most Once, At Least Once, Exactly Once
  • Producers and Consumers: How Data Flows in Kafka
  • Kafka Architecture Explained: Brokers, Topics, Partitions, and Offsets
  • Getting Started with Apache Kafka: Core Concepts and Use Cases
  • Security Best Practices for RabbitMQ in Production
  • Understanding RabbitMQ Virtual Hosts (vhosts) and Their Uses
  • RabbitMQ Performance Tuning: Optimizing Throughput and Latency
  • High Availability in RabbitMQ: Clustering and Mirrored Queues Explained
  • Implementing RPC (Remote Procedure Call) with RabbitMQ
  • RabbitMQ vs Kafka: Choosing the Right Messaging System for Your Project
  • Scaling Microservices with RabbitMQ: Patterns and Best Practices
  • Dead Letter Queues in RabbitMQ: How to Handle Failed Messages
  • Understanding RabbitMQ Exchange Types with Go: Default, Direct, Fanout, and Topic

Recent Comments

  1. Playing with VPC AWS (Part 2) – Widhian's Blog on Playing with VPC AWS (Part 1): VPC, Subnet, Internet Gateway, Route Table, NAT, and Security Group
  2. Basic Concept of ElasticSearch (Part 3): Translog, Flush, and Refresh – Widhian's Blog on Basic Concept of ElasticSearch (Part 1): Introduction
  3. Basic Concept of ElasticSearch (Part 2): Architectural Perspective – Widhian's Blog on Basic Concept of ElasticSearch (Part 3): Translog, Flush, and Refresh
  4. Basic Concept of ElasticSearch (Part 3): Translog, Flush, and Refresh – Widhian's Blog on Basic Concept of ElasticSearch (Part 2): Architectural Perspective
  5. Basic Concept of ElasticSearch (Part 1): Introduction – Widhian's Blog on Basic Concept of ElasticSearch (Part 2): Architectural Perspective

Archives

  • September 2025
  • August 2025
  • November 2021
  • October 2021
  • August 2021
  • July 2021
  • June 2021
  • March 2021
  • January 2021

Categories

  • Debezium
  • Devops
  • ElasticSearch
  • Golang
  • Kafka
  • Lua
  • NATS
  • Programming
  • RabbitMQ
  • Redis
  • VPC
© 2025 Widhian Bramantya | Powered by Minimalist Blog WordPress Theme