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  Kafka Architecture Explained: Brokers, Topics, Partitions, and Offsets

Use Case:

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

Related posts:

Offset Management and Consumer Groups in Kafka

Kafka Architecture Explained: Brokers, Topics, Partitions, and Offsets

RabbitMQ vs Kafka: Choosing the Right Messaging System for Your Project

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

  • Smart Automation in PostgreSQL: Managing Time-Based Data with pg_partman and pg_cron
  • Understanding PostgreSQL WAL, Slot, Publication, LSN, and Replication Lag
  • PostgreSQL Write-Ahead Log (WAL): Durability, Performance Tuning, and Recovery Explained
  • PostgreSQL Replication Deep Dive: From High Availability to Multi-Master Clusters
  • Finding Nearby Merchants in a Ride-Hailing App Using Elasticsearch Polygon Search
  • Advanced Text Search in Elasticsearch: N-Gram, Reverse, Fuzzy, and Search-as-you-type
  • Understanding and Customizing Analyzers in Elasticsearch
  • Log Management at Scale: Integrating Elasticsearch with Beats, Logstash, and Kibana
  • Index Lifecycle Management (ILM) in Elasticsearch: Automatic Data Control Made Simple
  • Blue-Green Deployment in Elasticsearch: Safe Reindexing and Zero-Downtime Upgrades
  • Maintaining Super Large Datasets in Elasticsearch
  • Elasticsearch Best Practices for Beginners
  • 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

Recent Comments

No comments to show.

Archives

  • October 2025
  • 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
  • PostgreSQL
  • Programming
  • RabbitMQ
  • Redis
  • VPC
© 2026 Widhian Bramantya | Powered by Minimalist Blog WordPress Theme