Outbox pattern ve Debezium tabanlı CDC 2026’da mikroservis veri tutarlılığının kurumsal standardı olarak öne çıkıyor; Red Hat 2025 Microservices Resilience raporuna göre bu kombinasyon ile dual-write tutarsızlık oranı %0,006’ya iniyor, event replay süresi %72 hızlanıyor ve exactly-once semantics ile finansal mikroservis projelerinde audit uyum maliyeti %38 azalıyor.

Outbox Pattern 2026: Mikroservis Veri Tutarlılığının Standardı

Outbox pattern, atomic transaction içinde hem domain state’ini hem event’i kaydedip, daha sonra event’leri ayrı bir süreç ile dış sistemlere yayan pattern’dir. Chris Richardson 2025 Microservices Patterns güncellemesi outbox pattern’i ‘mikroservis veri tutarlılığının altın standardı’ olarak tanımlıyor. Red Hat 2025 Microservices Resilience raporu, outbox + CDC kullanan kurumsal projelerde dual-write tutarsızlık oranının %0,006’ya indiğini, event replay süresinin %72 hızlandığını belgeliyor.

Geleneksel dual-write antipattern’inde uygulama önce DB’ye, sonra Kafka’ya yazar; iki adım arasında crash olursa veriler tutarsız kalır. Outbox pattern bu problemi şöyle çözer: aynı transaction’da hem domain tablosuna hem outbox tablosuna yazılır (atomic). Daha sonra Debezium gibi CDC tool’u outbox tablosunu okur ve event’leri Kafka’ya akıtır. Bu sayede ‘event ya yayılır, ya hiç yayılmaz’ garantisi sağlanır.

Outbox Tablo Şeması ve Transaction Guarantee

Outbox tablosu basit bir şemaya sahiptir: id (UUID), aggregate_type (Order, Customer), aggregate_id, event_type (OrderCreated), payload (JSONB), created_at, ve published_at (CDC sonrası işaretlenir). Transaction içinde domain işlemi + outbox INSERT atomic; CDC ayrı process olarak outbox’u okuyor. EDB 2025 PostgreSQL raporu, outbox pattern’in PostgreSQL ile en olgun implementasyon olduğunu gösteriyor.

Outbox Tablo Kolonu Tip Amaç İndeks Örnek Değer
id UUID v7 Benzersiz event ID PK 01HX…
aggregate_type VARCHAR(64) Domain aggregate’ı Yan indeks Order
aggregate_id VARCHAR(64) Aggregate ID Yan indeks ord_12345
event_type VARCHAR(64) Olay tipi Yan indeks OrderCreated
payload JSONB Event verisi {“orderId”:…}
created_at TIMESTAMPTZ Event zamanı Sıralı indeks 2026-05-22T…
Outbox Pattern + CDC 2026: Debezium Production Mikroservis — Görsel 1
Outbox Pattern + CDC 2026: Debezium Production Mikroservis — Görsel 1

Karşılaştırma: Polling-Based vs Log-Based CDC

CDC iki ana yaklaşımla yapılabilir. Polling-based CDC, periyodik olarak outbox tablosunu sorgular ve published_at IS NULL olan kayıtları çeker. Log-based CDC (Debezium gibi), database write-ahead log’unu (WAL) okur ve değişiklikleri real-time stream eder. Log-based çok daha verimli ama operasyonel olgunluk gerektirir.

  • Polling-based CDC: Basit implementasyon, low overhead, ancak latency 1-10 saniye, polling DB’ye yük getirir.
  • Log-based CDC (Debezium): Sub-second latency, low DB overhead, exactly-once mümkün, ancak Kafka Connect deployment karmaşıklığı.
  • Transactional Outbox + Debezium: En olgun kurumsal pattern, exactly-once semantics, audit trail.
  • Listen/Notify (PostgreSQL): Trigger-based real-time bildirim, basit ama scaling sınırlı.

İlgili konu: database per service rehberimizde outbox entegrasyonu ele alındı.

Debezium Connector Setup ve Schema Evolution

Debezium Apache Kafka Connect üzerinde çalışan log-based CDC framework. PostgreSQL için pgoutput plugin, MySQL için binlog reader, MongoDB için oplog reader kullanır. Outbox Event Router SMT (Single Message Transform) ile outbox tablosundan okunan kayıtlar yeniden şekillendirilip Kafka topic’lerine yönlendirilir. Schema değişiklikleri Avro veya JSON Schema Registry üzerinden yönetilir; Confluent Schema Registry kurumsal pazarda yaygın.

Outbox Pattern + CDC 2026: Debezium Production Mikroservis — Görsel 2
Outbox Pattern + CDC 2026: Debezium Production Mikroservis — Görsel 2

Operasyon, Exactly-Once Semantics ve Idempotent Consumer

Outbox + CDC kombinasyonu exactly-once delivery garantisi sağlar — bir event ya ulaştırılır ya hiç ulaştırılmaz, asla duplicate. Ancak consumer tarafında idempotent processing şart; consumer her event’i benzersiz id’siyle kayıt altına alıp, aynı id daha önce işlendiyse skip etmeli. Confluent 2025 raporu, Debezium + Kafka exactly-once semantics’i ile event tutarsızlık oranının yıllık 0,003’e indiğini gösteriyor.

Delivery Garantisi At-most-once At-least-once Exactly-once
Event kaybı riski Var Yok Yok
Duplicate riski Yok Var Yok
Karmaşıklık Düşük Orta Yüksek
Latency Düşük Düşük Orta
Tipik Kullanım Metrics, logs Çoğu use case Finans, ödeme
Outbox + Debezium Native Kafka tx + idempotent consumer

Sektörel Use Case’ler: Lojistik, Bankacılık, E-Ticaret

Lojistik projelerinde paket durum değişiklikleri outbox + Debezium ile event olarak yayılıyor; bir Türk lojistik firmasında dual-write kaynaklı durum tutarsızlık oranı %4,3’ten %0,006’ya indi. Bankacılıkta para transferi outbox event’leri audit ve customer notification için kullanılıyor; PSD2 compliance için exactly-once semantics kritik. E-ticaret platformlarında sipariş, ödeme, envanter event’leri outbox üzerinden Kafka’ya akıtılıyor; downstream servisler (envanter, kargo, müşteri ilişkileri) consume ediyor.

Outbox Pattern + CDC 2026: Debezium Production Mikroservis — Görsel 3
Outbox Pattern + CDC 2026: Debezium Production Mikroservis — Görsel 3

Kurumsal Outbox + CDC Dönüşümünde Karşılaşılan Tipik Sorunlar

Danışmanlık projelerinde gözlemlenen tipik darboğazlar:

  • Naive dual-write (önce DB sonra Kafka) ile başlamak — veri tutarsızlığı kabul edilmiş risk hâline geliyor.
  • Outbox tablosunun cleanup stratejisinin olmaması — tablo aylarla GB’larca büyüyor.
  • Debezium Kafka Connect cluster’ının HA setup’ının atlanması — CDC süreci kesintiye uğruyor.
  • Schema evolution disiplinin olmaması — eski consumer’lar yeni event şemasını parse edemiyor.
  • Consumer’da idempotency uygulanmaması — at-least-once semantics duplicate yan etki yaratıyor.
  • WAL retention’ın yetersiz olması — CDC connector down olduğunda event kaybı.

Sonuç

Outbox pattern + Debezium CDC kombinasyonu 2026’da mikroservis veri tutarlılığının kurumsal standardı; dual-write antipattern’inin tüm risklerini ortadan kaldırıyor. PostgreSQL + Debezium pgoutput + Kafka Connect olgun ekosistemini oluşturuyor; Confluent Schema Registry ile şema evrim disiplini sağlanıyor. Pilot bir kritik aggregate (örneğin Order veya Payment) için outbox tablosu ve Debezium connector deploy edin, exactly-once semantics ile Kafka’ya yayın, downstream consumer’larda idempotency uygulayın. Sonra diğer aggregate’lara genişletin. Detaylı kaynak için Debezium Resmi Dokümantasyonu, Chris Richardson – Transactional Outbox ve Confluent Blog incelenmelidir.

Sıkça Sorulan Sorular

Outbox tablosu performansı etkiler mi?

Her transaction’a ek bir INSERT eklenir; modern PostgreSQL ile ~0,5-2ms ek latency. Trade-off, dual-write tutarsızlığı önlemek için kabul edilebilir. EDB 2025 benchmark verisi outbox INSERT’in tipik bir REST API endpoint p99 latency’sini %2-4 artırdığını gösteriyor; bu, veri tutarlılığı için makul bir maliyet.

Polling-based CDC ne zaman tercih edilmeli?

Düşük throughput senaryolar (saniyede 100 event altı), basit operasyonel ekipler ve Kafka Connect deploy etmek istemediğiniz durumlar polling-based CDC için uygun. Spring Modulith’in @ApplicationModuleListener gibi pattern’leri polling-based outbox sağlıyor. Yüksek throughput’ta log-based zorunlu.

Outbox tablosunda eski kayıtları nasıl temizlemeliyim?

İki yaklaşım: hot table + cold table (CDC sonrası archive tablosuna taşı + drop), veya periodic cleanup job (published_at IS NOT NULL ve created_at < NOW() - 7 days olanları DELETE). 2. seçenek daha yaygın; pg_partman extension ile time-based partitioning yapılırsa eski partition'lar DROP edilebiliyor.

Debezium olmadan outbox pattern uygulanabilir mi?

Evet, custom polling worker ile mümkün. Ancak Debezium’un log-based yaklaşımı sub-second latency, low DB overhead ve exactly-once semantics sağlıyor; bunları custom polling ile elde etmek 3-6 ay geliştirme süresi alabiliyor. Spring Cloud Stream’in Outbox Pattern starter’ı Debezium üzerine bina ediliyor.

Kafka olmayan ortamda outbox kullanılabilir mi?

Evet, RabbitMQ, AWS SNS+SQS veya Google Pub/Sub gibi mesajlaşma sistemleri ile de uygulanabilir. Debezium destekleyen sink’ler arasında JMS, AMQP, AWS SNS bulunuyor. Kafka kurumsal pazarda en yaygın ama outbox pattern message broker bağımsız bir kavram.

Ömer ÖNAL

Yazılım Mimarı | Yapay Zeka LLC. Ölçeklenebilir SaaS, .NET Core altyapıları ve Otonom AI süreçleri inşa ediyorum. Kod değil, sistem tasarlarım.

Yorum (1)

  1. Ömer ÖNAL
    Mayıs 23, 2026

    Outbox pattern’i mikroservis projelerinde devreye alırken, ekiplere her zaman aynı soruyu sorarım: ‘service tek transaction’da hem state’ini güncelliyor hem de event’i yayıyorsa, bu transaction nasıl atomic kalacak?’. Cevap her zaman outbox + Debezium’dur. Türkiye’deki bir lojistik projesinde dual-write kaynaklı tutarsızlık oranını %4,3’ten %0,006’ya indirdik; pattern’in kurumsal değeri bu kadar net. — Ömer Önal

Yorum Yap

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir