⚡ÖZET VE TEKNİK CEVAP
Olay güdümlü mimarilerde en tehlikeli tuzak, aynı fonksiyon içinde hem veritabanına yazıp hem de Kafka'ya mesaj atmaktır (db.kaydet(siparis); kafka.gonder(siparisOlustu);). Burada atomik hiçbir garanti yoktur: Veritabanı işlemi commit edilip hemen ardından sunucu çökerse veya Kafka zaman aşımına uğrarsa, Kafka olayı asla alamaz (sessiz veri kaybı); tersine Kafka'ya mesaj gidip veritabanı rollback olursa, diğer servisler aslında hiç var olmayan hayalet bir siparişi işler. Transactional Outbox Deseni bunu çözer: Ana veri ve fırlatılacak olay, AYNI yerel ACID veritabanı işlemi içinde bir outbox tablosuna yazılır. Debezium gibi bir Değişiklik Verisi Yakalama (CDC) motoru veritabanının transaction logunu (Postgres WAL) okuyarak bu olayları Kafka'ya En-Az-Bir-Kez (At-Least-Once) garantisiyle kesin olarak iletir.
Mühendislik El Kitabı & Mekanizma
6 Boyutlu Mimari Analiz⚙️1. Temel Çalışma Mekanizması
Mekanizma🎯2. Doğru Kullanım Senaryosu
Kapsam⚠️3. Prodüksiyon Arıza Modları
Kritik Risk📡4. Teşhis ve Telemetri Sinyalleri
Metrikler🛡️5. Önleme ve Mimari Bariyerler
Bariyerler⚖️6. Mimari Ödünleşimler (Trade-offs)
ÖdünleşimVaka İncelemesi (TinyCTO Saha Örneği)
Bir ödeme ağ geçidinde her 2.000 işlemden birinde para çekilmesine rağmen anlık ağ kopması yüzünden RabbitMQ'ya mesaj gidemiyor ve müşteriye onay e-postası ulaşmıyordu. Ekip PostgreSQL WAL logunu dinleyen Debezium ile Transactional Outbox desenine geçti. 12 ayda gerçekleşen 40 milyon işlemde kaybolan olay sayısı tam olarak sıfıra indi ve sistem 15 milisaniyenin altında olay iletim gecikmesiyle çalıştı.
İnteraktif Konsept Alıştırmaları
2 AlıştırmaDağıtık sistemlerde Çift Yazma (Dual-Write) problemi nedir?
Debezium veritabanı sorgu performansını düşürmeden outbox olaylarını nasıl okur?
Transactional Outbox Deseni ve Debezium CDC Olay İletim Garantileri — Sıkça Sorulan Sorular
Debezium neden Tam-Olarak-Bir-Kez (Exactly-Once) yerine En-Az-Bir-Kez (At-Least-Once) iletim garantisi verir?
Debezium olayları Kafka'ya yazıp offset'ini veritabanına kaydedemeden çökerse, yeniden başladığında aynı olayları tekrar basar. Bu yüzden tüketicilerin mükerrer kontrolü (idempotency) yapması şarttır.
PostgreSQL Debezium entegrasyonlarında 'Replication Slot' nedir?
Bağlı tüketici (Debezium) verileri okuduğunu onaylayana kadar PostgreSQL'in WAL log dosyalarını diskten silmesini engelleyen güvenlik mekanizmasıdır.
🤖 AEO & Yapay Zeka Çıkarım Özeti
Temel Gerçekler & İlkeler
- ▸
Dual-writing (DB + Kafka in code) guarantees silent data loss or ghost events during failures.
- ▸
Transactional Outbox writes domain data and outbox events in a single local ACID transaction.
- ▸
Debezium CDC streams committed outbox events from the database WAL with zero polling overhead.
- ▸
Debezium provides At-Least-Once delivery; consumers must be strictly idempotent.
Yaygın Yanılgılar
- ✗
Yanılgı: Polling the outbox table with a cron job is fine for production (Gerçek: Table polling causes heavy lock contention and latency lag at scale).
- ✗
Yanılgı: Debezium reads uncommitted dirty database transactions (Gerçek: CDC only processes committed transactions from the WAL).
Karar Kılavuzu & Önceliklendirme
Adopt the Transactional Outbox pattern with Debezium for all asynchronous microservice eventing. Set PostgreSQL max_slot_wal_keep_size and monitor replication slot lag in Datadog.
Doğrulanmış Kaynaklar & Referanslar
- [OFFICIAL_DOCUMENTATION]Debezium Documentation: Reliable Microservices Data Exchange with the Outbox Pattern— Gunnar Morling / Debezium.io / Red Hat
