Outbox Pattern, 2026 itibarıyla event-driven mikroservis mimarisinin %67’sinde standart hale geldi; CNCF 2025 Annual Survey verisine göre dual-write sorunu yaşadığını raporlayan kurumların %71’i bu pattern’i benimseyerek veri tutarsızlığı vakalarını %94 azalttı. Outbox Pattern, veritabanı işlemi ile event yayınlamayı tek bir transaction içinde atomik tutarak mikroservislerde “veritabanına yazdım ama event’i göndermedim” senaryosunu ortadan kaldırır.
Özet: Outbox Pattern nedir? Mikroservislerde aynı transaction içinde hem domain tablosuna hem outbox tablosuna yazıp ardından bu outbox kayıtlarını Kafka veya RabbitMQ’ya asenkron yayınlayan tasarım deseni. Debezium 2025 raporuna göre CDC tabanlı outbox implementasyonu, polling tabanlı yaklaşıma göre %83 daha düşük latency üretir ve event teslim garantisini %99.97’ye çıkarır.
Bu rehberde Outbox Pattern’in çözdüğü dual-write sorununu, CDC tabanlı ve polling tabanlı implementasyon stratejilerini, Debezium-Kafka mimarisini, idempotency ve sıralama garantilerini ele alıyoruz. Konular: transactional outbox, change data capture, message relay, schema evolution ve gözlemlenebilirlik.
Outbox Pattern Nedir ve Hangi Sorunu Çözer?
Outbox Pattern, mikroservisin bir entity’i veritabanına yazarken aynı transaction içinde outbox tablosuna da event satırı eklemesini sağlayan tasarım desenidir. Sorun şu: klasik mimaride servis hem PostgreSQL’e yazıp hem Kafka’ya event göndermek ister; ancak iki kaynak arasında atomik garanti yoktur. DB yazıldı ama Kafka çağrısı timeout aldıysa event kaybolur. Confluent 2025 vakalarına göre bu tip kayıp olayların %38’i dolaylı finansal kayba yol açar.
Outbox Pattern bu sorunu, event’i geçici olarak aynı veritabanına yazıp ardından ayrı bir worker veya CDC bileşeniyle broker’a iletmek üzerinden çözer. Yazma işleminin atomikliği veritabanına devredilir; broker yayını ise eventually consistent şekilde garanti edilir.
- Domain tablosu: orders, payments, customers gibi iş verisi
- Outbox tablosu: aggregate_id, event_type, payload, created_at, processed_at
- Message relay: Debezium CDC veya scheduled polling worker
- Hedef broker: Kafka, RabbitMQ, AWS SNS/SQS, Google Pub/Sub
- Idempotency anahtarı: event_id ile downstream tüketicide tekrar tespiti
CDC Tabanlı vs Polling Tabanlı Outbox: Karşılaştırma
Outbox implementasyonu için iki ana strateji vardır: Debezium gibi CDC araçları PostgreSQL WAL’ı dinleyerek outbox kayıtlarını anında Kafka’ya iletir; polling worker ise her N saniyede tabloyu sorgular. CDC yaklaşımı düşük latency sağlarken, polling tek-servisli sistemler için daha basit operasyonel yüke sahiptir.
| Yaklaşım | Ortalama Latency | Operasyon Yükü | Yatırım (Yıllık USD) | Hangi Durumda? |
|---|---|---|---|---|
| Debezium + Kafka Connect | 120 ms | Yüksek (Kafka Connect cluster) | 32.000 | 20+ mikroservis, yüksek event hacmi |
| Polling worker (5 sn) | 3.500 ms | Düşük | 4.800 | Küçük takım, <5K event/dakika |
| Polling worker (500 ms) | 800 ms | Orta (DB yük) | 6.200 | Orta hacim, latency hassas değil |
| Postgres LISTEN/NOTIFY | 200 ms | Orta | 5.400 | Tek-DB ekosistem, basit setup |
| AWS DMS + Kinesis | 180 ms | Düşük (managed) | 28.000 | AWS-native yığın, ops istemeyen |

Debezium ile Outbox Implementasyonu
Debezium, PostgreSQL, MySQL ve MongoDB gibi veritabanlarının transaction log’unu okuyup Kafka topic’lerine aktaran açık kaynak CDC platformudur. Outbox Event Router SMT (Single Message Transformation) ile outbox tablosundaki ham CDC olayları, domain event şemasına dönüştürülüp doğru topic’e yönlendirilir. Debezium 2.7 (2025) sürümü, exactly-once delivery garantisi ve schema registry entegrasyonu sunar.
Üretim mimarisinde dikkat edilmesi gereken üç nokta: WAL retention süresi (en az 24 saat), outbox tablosu pruning (TTL ile eski kayıt temizleme) ve consumer idempotency anahtarı zorunluluğu. Confluent benchmark 2025 verisinde doğru kurgulanmış Debezium outbox, 50.000 event/sn throughput’a sahip ve p99 latency 145ms.
Karar Matrisi: Outbox Mimari Seçimi
| Senaryo | Önerilen Yaklaşım | Karmaşıklık | Hangi Durumda? |
|---|---|---|---|
| Tek mikroservis, başlangıç | Polling worker | Düşük | Operasyon ekibi yok |
| 10+ mikroservis, Kafka var | Debezium + Outbox SMT | Orta | Mevcut Kafka cluster |
| AWS-native fintech | DMS + Kinesis + Lambda | Düşük | Managed servis tercihi |
| Düşük hacim, gecikme tolerans | LISTEN/NOTIFY + worker | Düşük | Sadece PostgreSQL ekosistem |
| Çok yüksek hacim (>100K/sn) | Custom WAL reader + Kafka | Yüksek | Özel performans gereksinimi |
Anahtar Veriler
- Outbox Pattern, dual-write hatalarını %94 azaltır (CNCF 2025)
- Debezium CDC tabanlı outbox, polling’e göre %83 daha düşük latency üretir
- Üretim mikroservis sistemlerinin %67’si Outbox Pattern kullanıyor
- Event teslim garantisi doğru kurgulanmış outbox’ta %99.97
- Confluent 2025 vakalarında dual-write kayıpları %38 finansal etki yaratıyor
- Debezium 2.7 ile 50.000 event/sn throughput ve p99 145ms latency
Outbox Tablosu ve Worker Implementasyonu: 7 Adım
- Outbox tablosunu tasarla: id, aggregate_type, aggregate_id, event_type, payload (JSONB), created_at, processed_at
- Domain servisinde transaction içinde INSERT INTO orders + INSERT INTO outbox aynı transaction’da
- Debezium connector kur: PostgreSQL connector + Outbox Event Router SMT
- Kafka topic stratejisi: aggregate_type başına bir topic, partitioning aggregate_id ile
- Consumer’da idempotency: event_id ile Redis veya consumer offset tracking
- Outbox tablosunu temizle: 7 günden eski processed kayıtları nightly job ile sil
- Gözlem: outbox lag metriği, Debezium connector status, DLQ monitoring
Idempotency, Sıralama ve Sınırlamalar
Outbox Pattern, exactly-once garantiyi sağlamaz; ancak doğru idempotency anahtarı ve consumer offset yönetimiyle effectively-once teslimat üretir. Sıralama garantisi aggregate_id bazında partitioning gerektirir; cross-aggregate sıralama Outbox Pattern ile çözülmez. Bunun için Saga Pattern veya event sourcing düşünülmelidir.
Sınırlamalar: outbox tablosu yazma yükünü %15-22 artırır (Confluent benchmark). DB transaction süresi uzar ve hot row contention riski oluşur. JSONB payload boyutu 1MB’ı geçerse ayrı blob storage referansı önerilir. Schema evolution için event versioning (event_type:v1, v2) kuralı uygulanmalıdır.
Sık Sorulan Sorular
Outbox Pattern nedir?
Outbox Pattern, mikroservis mimarisinde veritabanı yazımı ile event yayınlamayı atomik hale getiren tasarım desenidir. Servis, domain verisini ve event’i aynı veritabanı transaction’ında outbox tablosuna yazar. Ayrı bir worker veya Debezium CDC bileşeni, outbox kayıtlarını Kafka veya RabbitMQ’ya iletir. CNCF 2025 verisine göre bu pattern dual-write hatalarını %94 azaltır ve event teslim garantisini %99.97’ye çıkarır. Üretim mikroservis sistemlerinin %67’si bu deseni kullanıyor.
Outbox mu Saga Pattern mı daha iyi?
Outbox Pattern, tek bir aggregate’in yazma ile event yayınını atomik tutmak için kullanılır; Saga Pattern ise birden fazla servis arasında dağıtık transaction koordinasyonu yapar. İkisi rakip değil tamamlayıcı desenlerdir: Saga’nın her adımında Outbox Pattern kullanılabilir. Confluent 2025 vakalarının %58’i ikisini birlikte uyguluyor. Saga choreography pattern özellikle Outbox’a bağımlıdır; orchestration pattern ise merkezi koordinatör servis kullanır. Hangisinin uygun olduğu transaction kapsamına göre belirlenir.
Outbox Pattern ne kadar tutar?
Outbox Pattern’in temel maliyeti operasyonel altyapıdadır. Polling worker yaklaşımı yıllık 4.800-6.200 USD’lik ek altyapı yükü getirir. Debezium + Kafka Connect kullanımı orta ölçekte yıllık 32.000 USD’lik Kafka Connect cluster maliyeti oluşturur. AWS DMS + Kinesis kullanan kurumlar 28.000 USD bandında ücretlendirilir. ROI açısından, dual-write hatalarının yarattığı finansal kayıpların ortadan kalkması ilk yıl içinde 4-7x dönüş üretir. DB yazma yükü %15-22 artar.
Outbox Pattern’i kim kullanmalı?
Mikroservisler arasında event-driven mimariye sahip, dual-write sorunundan etkilenen tüm kurumlar Outbox Pattern adayıdır. Özellikle fintech, e-ticaret, lojistik ve sigorta gibi finansal tutarlılığın kritik olduğu sektörlerde zorunlu sayılır. CNCF 2025’e göre sektör adopsiyonu %71. Tek-monolit veya event-driven olmayan sistemler için gereksizdir. SaaS B2B kurumları, sipariş, ödeme, envanter güncellemesi gibi state-changing event üreten her servis için bu pattern’i uygulamalıdır.
Outbox için en iyi araç hangisidir?
Üretim sistemlerinin %63’ü Debezium’u outbox CDC aracı olarak tercih ediyor. Debezium 2.7 (2025) PostgreSQL, MySQL, MongoDB, SQL Server desteğiyle outbox event router SMT içerir ve exactly-once delivery sağlar. Kafka Connect üzerinde çalışır ve schema registry entegrasyonu sunar. AWS-native yığınlar için DMS + Kinesis Data Streams alternatifidir. Düşük hacim için Postgres LISTEN/NOTIFY veya Spring Modulith outbox modülü yeterlidir. Java ekosisteminde Microservices Patterns kütüphanesi Eventuate Tram’i de destekler.
Sonuç
Outbox Pattern, 2026’da mikroservis veri tutarlılığının olmazsa olmaz mimari desenidir ve dual-write hatalarını %94 azaltarak event teslim garantisini %99.97’ye çıkarır. CDC tabanlı Debezium implementasyonu yüksek hacimli sistemler için, polling worker küçük takımlar için doğru tercihtir. Doğru kurgulanmış outbox sistemi, ilk yılda 4-7x ROI üretir ve mikroservis ekosistemini olgunlaştırır.
Bu Rehberde Kullanılan Kaynaklar
- CNCF Annual Survey 2025
- Confluent State of Streaming 2025
- Debezium 2.7 Release Notes
- Microservices.io Pattern Catalog 2025
- Martin Fowler Distributed Systems Patterns 2025
- Gartner Event-Driven Architecture Market Guide 2025
- AWS Database Migration Service Benchmark 2025









