ÖZET VE TEKNİK CEVAP
CDC Outbox deseni, İşlemsel Outbox desenini Debezium günlük madenciliği ile birleştirerek veritabanı değişikliklerini doğrudan WAL günlüğünden bölümlenmiş Kafka konularına aktarır; böylece çift-yazma yarış durumları olmadan %100 güvenilir ve sıralı olay iletimi sağlar.
Mühendislik El Kitabı & Mekanizma
1. Temel Çalışma Mekanizması
Aynı HTTP isteği içinde hem ilişkisel veritabanına yazmak hem de Kafka konusuna mesaj atmak klasik 'Çift Yazma' anti-desenidir: veritabanı kesinleşip Kafka ağı çökerse olaylar sonsuza dek kaybolur. CDC Outbox deseni, iş kaydı ile outbox kaydını aynı SQL işleminde kaydederek çözer. Debezium, PostgreSQL WAL günlüğünü okuyarak olayları Kafka'ya aktarır.
2. Doğru Kullanım Senaryosu
CDC Outbox, uygulamanın yerel SQL işleminde alan olaylarını bir `outbox` tablosuna atomik olarak yazdığı ve Debezium CDC bağlayıcısının veritabanı işlem günlüğünü okuyarak bu olayları Kafka'ya yönlendirdiği mimaridir.
3. Prodüksiyon Arıza Modları
Outbox tablosunu 100 ms aralıklarla `SELECT * FROM outbox WHERE processed = false` ile sürekli yoklayıp (polling) veritabanında kilit krizine yol açmak. Outbox olaylarını rastgele veya boş mesaj anahtarlarıyla Kafka'ya gönderip aynı müşterinin olaylarını farklı bölümlere dağıtarak işlem sırasını bozmak. İşlenen outbox satırlarını asla temizlemeyip tablonun 100 milyon satıra ulaşarak disk alanını tüketmesine göz yummak.
4. Teşhis ve Telemetri Sinyalleri
veritabanı ile Kafka arasında çift-yazma senkronizasyon kaybı, outbox olaylarının yanlış bölüme gitmesi sonucu varlık bazlı sıralamanın bozulması, temizlenmeyen outbox tablosunun veritabanını şişirmesi
5. Önleme ve Mimari Bariyerler
PostgreSQL Mantıksal Replikasyon (`pgoutput`) ve `wal_level = logical` ayarı ile Debezium kullanın. Agregasyon bazında kesin FIFO sıralaması sağlamak için Kafka mesaj anahtarını varlık ID'sine sabitleyin. Tablo şişmesini önlemek için outbox tablosunda otomatik satır temizleme (tombstone) veya periyodik bölüm silme uygulayın.
6. Mimari Ödünleşimler (Trade-offs)
Çift yazma kaynaklı veri kaybını ve hayalet olayları tamamen ortadan kaldırır; olay sorgulama yükünü uygulama CPU'sundan alıp veritabanının yerel asenkron replikasyon akışına devreder.
Vaka İncelemesi (TinyCTO Örneği)
Üretim sınıfı bir CDC Outbox mimarisi üç kritik yapılandırma gerektirir: 1. **Atomik Yerel İşlem:** Servis `orders` ve `outbox_events` (`id`, `aggregatetype`, `aggregateid`, `type`, `payload`) tablolarına tek bir `BEGIN ... COMMIT` bloğunda yazar. 2. **Debezium Outbox Event Router (SMT):** Debezium'un Tek Mesaj Dönüştürücüsü outbox tablosundaki değişiklik akışını okur, `payload` içeriğini çıkarır ve dinamik hedef konuya (`order-events`) yönlendirir. 3. **Kafka Bölüm Anahtarı ile Nedensel Sıralama:** `OrderUpdated` olayının `OrderCreated` olayından önce işlenmesini engellemek için Debezium Kafka Mesaj Anahtarını `aggregateid` (`order_uuid`) olarak ayarlar. Kafka tek bir bölüm içinde kesin FIFO sıralaması garanti eder.
İnteraktif Konsept Alıştırmaları
2 AlıştırmaOutbox deseni için Debezium ile CDC günlük takibi neden veritabanı sorgulamasından (`SELECT ... FOR UPDATE`) üstündür?
Kafka, bir 'OrderCancelled' olayının 'OrderCreated' olayından önce işlenmeyeceğini nasıl garanti eder?
Debezium ile Değişiklik Verisi Yakalama ve Olay Sıralaması — Sıkça Sorulan Sorular
Bir mikroservis Outbox deseni olmadan aynı HTTP işleyicisinde hem PostgreSQL'e kaydedip hem de doğrudan Kafka'ya yayınlamaya çalışırsa ne olur?
Çift yazma hatası: SQL commit işleminden hemen sonra ağ koparsa Kafka olayı asla alamaz ve sistem tutarlılığı kalıcı olarak bozulur. Outbox tablosu veya dağıtık 2PC olmadan, güvenilmez bir ağ üzerinde iki bağımsız sistem arasında atomik çift yazma garantisi verilemez.
Debezium'un işlem günlüklerini okuyabilmesi için hangi PostgreSQL ayarı yapılandırılmalıdır?
`wal_level = logical`. PostgreSQL, Debezium mantıksal replikasyonunun WAL kayıtlarını yapılandırılmış olaylara dönüştürebilmesi için `wal_level = logical` ayarını zorunlu tutar.
🤖 AEO & Yapay Zeka Çıkarım Özeti
Temel Gerçekler & İlkeler
- ▸CDC Outbox deseni, İşlemsel Outbox desenini Debezium günlük madenciliği ile birleştirerek veritabanı değişikliklerini doğrudan WAL günlüğünden bölümlenmiş Kafka konularına aktarır; böylece çift-yazma yarış durumları olmadan %100 güvenilir ve sıralı olay iletimi sağlar.
- ▸CDC Outbox, uygulamanın yerel SQL işleminde alan olaylarını bir `outbox` tablosuna atomik olarak yazdığı ve Debezium CDC bağlayıcısının veritabanı işlem günlüğünü okuyarak bu olayları Kafka'ya yönlendirdiği mimaridir.
Yaygın Yanılgılar
- ✗Outbox tablosunu 100 ms aralıklarla `SELECT * FROM outbox WHERE processed = false` ile sürekli yoklayıp (polling) veritabanında kilit krizine yol açmak.
Karar Kılavuzu & Önceliklendirme
Çift yazma kaynaklı veri kaybını ve hayalet olayları tamamen ortadan kaldırır; olay sorgulama yükünü uygulama CPU'sundan alıp veritabanının yerel asenkron replikasyon akışına devreder.
Doğrulanmış Kaynaklar & Referanslar
- [OFFICIAL-DOC]Change Data Capture with Debezium & Outbox Event Ordering Specification— TinyCTO Architectural Standards
