Skip to content

Widhian Bramantya

coding is an art form

Menu
  • About Me
Menu
debezium

What is Debezium? – An Introduction to Change Data Capture

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

Outbox Pattern (Sequence Diagram)

sequenceDiagram
  autonumber
  participant App as Application Service
  participant DB as Database (with Outbox Table)
  participant DBZ as Debezium Connector
  participant K as Kafka
  participant C as Consumer Service

  App->>DB: Write business data (orders)
  App->>DB: Insert outbox event (status=PENDING)
  DBZ->>DB: Read transaction log (binlog/WAL)
  DBZ-->>K: Publish event to topic (outbox.events)
  K-->>C: Deliver event
  C->>C: Process event (e.g., send email, update cache)
  C-->>DB: (optional) Ack/Update status via API
  1. Application Service (App)
    • The application performs a normal business action, for example:
      • “Create a new order”.
    • At the same time, it also writes an outbox event into a special table called the outbox table inside the same database.
    • The outbox event usually has a status like PENDING, which means it is waiting to be processed.
  1. Database (DB with Outbox Table)
    • The database now contains two things:
      1. The business data (like order details).
      2. The outbox event (which describes what happened, e.g., “OrderCreated”).
    • Both are stored in the same transaction, so they are always consistent.
  1. Debezium Connector (DBZ)
    • Debezium monitors the database transaction log (binlog for MySQL, WAL for PostgreSQL, etc.).
    • When it sees the new outbox event row, Debezium captures it.
  1. Apache Kafka (K)
    • Debezium publishes the outbox event into a Kafka topic, for example outbox.events.
    • Kafka acts as a broker, keeping the event safe and allowing many consumers to subscribe to it.
  1. Consumer Service (C)
    • A consumer (another microservice, for example an email service or inventory system) reads the event from Kafka.
    • It processes the event — for example:
      • Send a confirmation email to the customer.
      • Update the product stock.
      • Refresh a cache.
  1. (Optional) Acknowledgment
    • After processing, the consumer can send back an acknowledgment to the application or database.
    • For example, it might update the outbox row from PENDING to SENT or DONE.
    • This step is optional but can be useful for monitoring and reliability.
See also  Production-Grade Debezium Connector with Kafka (Postgres Outbox Example – E-Commerce Orders)

Why Use the Outbox Pattern?

  • Ensures consistency between business data and events (no missing messages).
  • Avoids “dual-write problem” (where DB and Kafka writes could get out of sync).
  • Makes microservices more reliable and event-driven.
Pages: 1 2 3
Category: Debezium

Leave a Reply Cancel reply

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

Linkedin

Widhian Bramantya

Recent Posts

  • 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
  • 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

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

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