---
title: "Chapter 04: Transactional Outbox & Change Data Capture (CDC) Mimarisi | TinyCTO Distributed Systems Canon"
description: "Ö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."
image: "https://tinycto.tv/assets/distributed-systems/distributed_systems_manuals_og.jpg"
canonicalUrl: "https://tinycto.tv/tr/distributed-systems/manuals/04-transactional-outbox-cdc-mimarisi"
locale: "tr"
---

# Chapter 04: Transactional Outbox & Change Data Capture (CDC) Mimarisi

> **Kanonik Dağıtık Sistemler Mühendislik Kılavuzu**
> **Teorem Referansı**: Chris Richardson (Microservices Patterns) / Debezium Specification | **Okuma Süresi**: 20 min read | **Olgunluk Seviyesi**: SCALED

Ö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.

# 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.

```mermaid
sequenceDiagram
    autonumber
    participant App as Sipariş Servisi
    participant DB as PostgreSQL (ACID)
    participant WAL as Write-Ahead Log (WAL)
    participant Debezium as Debezium CDC Motoru
    participant Kafka as Apache Kafka

    App->>DB: 1. BEGIN TRANSACTION
    App->>DB: 2. INSERT INTO orders (...)
    App->>DB: 3. INSERT INTO outbox_events (id, topic, payload)
    App->>DB: 4. COMMIT TRANSACTION (Atomik Yerel Commit)
    DB->>WAL: 5. Mutasyonları WAL Dosyasına Ekle
    Note over Debezium: Bloklamayan WAL Okuma<br/>(pgoutput eklentisi)
    WAL->>Debezium: 6. Mantıksal Kod Çözüm Olaylarını Aktar
    Debezium->>Kafka: 7. Idempotent EOS ile Kafka'ya Yaz (acks=all)
```

## 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.


### Temel Kavramlar & Modeller

- `Dual-Write Elimination`
- `Transactional Outbox`
- `Change Data Capture (CDC)`
- `PostgreSQL WAL`
- `Debezium Engine`

### Kanon Yüzeyleri & Bağlantılar

- **Kılavuzlar Kütüphanesi**: https://tinycto.tv/tr/distributed-systems/manuals
- **18 Referans Mimarisi**: https://tinycto.tv/tr/distributed-systems/architectures
- **Topoloji & Boyutlandırma Sihirbazı**: https://tinycto.tv/tr/distributed-systems/wizard
- **Teknoloji & Konsensüs Matrisi**: https://tinycto.tv/tr/distributed-systems/matrix

```json
{
  "@context": "https://schema.org",
  "@type": "TechArticle",
  "headline": "Transactional Outbox & Change Data Capture (CDC) Mimarisi",
  "description": "Ö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.",
  "inLanguage": "tr",
  "educationalLevel": "Advanced",
  "proficiencyLevel": "Expert",
  "url": "https://tinycto.tv/tr/distributed-systems/manuals/04-transactional-outbox-cdc-mimarisi"
}
```
