Skip to main content

> CHAPTER 04 // SCALED // 20 MIN READ

Transactional Outbox & Change Data Capture (CDC) Mimarisi

Ölümcül dual-write anti-pattern’ini ortadan kaldırma: olayları yerel veritabanı işlemlerinde atomik saklama, Debezium CDC ile Write-Ahead Log (WAL) okuma ve sıfır kaymayla brokerlara aktarma.

Tüm Kılavuzlara Dön (10 Bölüm)📜 Chris Richardson (Microservices Patterns) / Debezium Specification
CHAPTER 0420 min readChris Richardson (Microservices Patterns) / Debezium Specification

Transactional Outbox & Change Data Capture (CDC) Mimarisi

Ölümcül dual-write anti-pattern’ini ortadan kaldırma: olayları yerel veritabanı işlemlerinde atomik saklama, Debezium CDC ile Write-Ahead Log (WAL) okuma ve sıfır kaymayla brokerlara aktarma.

Temel Kavramlar:Dual-Write EliminationTransactional OutboxChange Data Capture (CDC)PostgreSQL WALDebezium Engine

Transactional Outbox & Change Data Capture (CDC) Mimarisi

Yönetici Özeti

Mikroservis mimarilerinde yerel bir veritabanını güncelleyip ardından ilgili olayı bir mesaj kuyruğuna yayınlamak tehlikeli bir dağıtık işlemdir. Veritabanı commit işlemi ile broker çağrısı arasında uygulama çökerse veri tutarsızlığı kalıcı hale gelir. Transactional Outbox deseni ve Change Data Capture (CDC) teknolojisi, pahalı ve kilitlenmeye açık iki aşamalı commit (2PC) protokollerine ihtiyaç duymadan bu "çift-yazma" (dual-write) hatasını matematiksel olarak ortadan kaldırır.

1. Çift-Yazma (Dual-Write) Güvenlik Açığı

Geleneksel hatalı akış:

BEGIN TRANSACTION;
  UPDATE accounts SET balance = balance - 100 WHERE id = 42;
COMMIT;
kafkaProducer.send("AccountDebited", account); // BROKER ERİŞİLEMEZSE VEYA SERVİS ÇÖKERSE MESAJ KAYBOLUR!

Veritabanı güncellendi ancak olay hiçbir zaman yayınlanmadı. Tersi durumda, önce mesaj gönderilip veritabanı rollback olursa Kafka’da hayalet olaylar kalır.

SEQUENCE DIAGRAMTransactional Outbox & Change Data Capture (CDC) Mimarisi
⚡ TinyCTO.tv

2. PostgreSQL Mantıksal Kod Çözüm ve Debezium Boru Hattı

  1. Atomik Yerel Outbox Kaydı: Outbox tablosu, iş varlığıyla tam olarak aynı yerel ACID transaction içinde yazılır.
  2. PostgreSQL WAL Akışı: PostgreSQL `pgoutput` eklentisi Write-Ahead Log dosyasındaki değişiklikleri JSON/Avro olaylarına dönüştürür.
  3. Debezium Offset Takibi: Debezium, Kafka brokerlarından onay alana kadar offset kaydetmez; böylece sıfır veri kaybıyla en az bir kez teslimat (at-least-once) sağlanır.
  4. Outbox Bölüm Yönlendirmesi: Olay yükü, hedef Kafka konusunu ve bölümleme anahtarını doğrudan ilişkisel sütunlardan belirler.