ÖZET VE TEKNİK CEVAP
Asenkron olay güdümlü mikroservislerde, bağımsız servisler ortak mesaj kuyrukları (Kafka, Pulsar) üzerinden haberleşir. A Takımı bir Avro veya Protobuf şemasına zorunlu bir alan ekler veya mevcut alanın adını değiştirirse, canlıda henüz güncellenmemiş eski tüketici servisleri anında **SerDe (Deserialization) Hataları** vererek çöker ve kuyruk tıkanır. Bir **Şema Kayıt Merkezi (Schema Registry)** merkezi bir denetçi olarak çalışır ve şemaları katı **Uyumluluk Modları (Compatibility Modes)** ile güvenceye alır: (1) **GERİYE UYUMLULUK (BACKWARD)**: Yeni şemaya sahip tüketiciler, eski üreticilerin ürettiği mesajları okuyabilir (önce tüketicilerin güncellenmesine izin verir). (2) **İLERİYE UYUMLULUK (FORWARD)**: Eski şemaya sahip tüketiciler, yeni üreticilerin mesajlarını okuyabilir (önce üreticilerin güncellenmesine izin verir). (3) **TAM UYUMLULUK (FULL)**: Hem geriye hem ileriye aynı anda uyumludur. (4) **TAM GEÇİŞLİ UYUMLULUK (FULL_TRANSITIVE)**: Yeni şemanın sadece bir önceki ($N-1$) sürüme değil, Kafka diskinde geçmişten kalan **tüm $1 dots N-1$ eski şema sürümlerine** karşı %100 uyumlu olduğunu garanti eder.
Mühendislik El Kitabı & Mekanizma
1. Temel Çalışma Mekanizması
Şema Kayıt doğrulaması CI/CD ve çalışma anı serileştirme aşamalarında gerçekleşir: (1) Şema Kayıt API'si: Üretici yeni bir şema sürümü çıkardığında CI/CD bu şemayı `POST /subjects/{konu-adi}/versions` uç noktasına gönderir. (2) Uyumluluk Kontrolü: Registry yeni şemayı belirlenen kurala (`FULL_TRANSITIVE`) göre denetler. Kırıcı bir değişiklik (varsayılan değeri olmayan zorunlu alan ekleme gibi) varsa kayıt işlemi HTTP 409 ile reddedilir. (3) 5-Bayt Başlık: Kayıt geçerliyse üretici her Kafka mesajının başına 5 baytlık bir başlık ekler (`Magic Byte + 4-bayt Şema ID`); tüketici bu ID ile registry'den ilgili şemayı çekip önbelleğe alır ve mesajı hatasız çözer.
2. Doğru Kullanım Senaryosu
Olay güdümlü veri ambarları, Apache Kafka akış hatları, kurumsal CDC boru hatları (Debezium) ve gerçek zamanlı finansal denetim kuyrukları.
3. Prodüksiyon Arıza Modları
Uyumluluk modunu `NONE` yapıp kırıcı bir şema değişikliği ile arkadaki 20 farklı tüketici grubunun aynı anda çökmesine sebep olmak; Avro şemasına `default` değeri olmayan yeni bir alan ekleyip geriye uyumluluğu patlatmak.
4. Teşhis ve Telemetri Sinyalleri
Tüketici loglarında `SerializationException: Error deserializing Avro message` hatalarının patlaması; CI/CD testlerinde Schema Registry'nin `409 Incompatible schema` dönmesi.
5. Önleme ve Mimari Bariyerler
Canlı ortamdaki şema kayıtlarında `FULL_TRANSITIVE` modunu zorunlu kılın; şema uyumluluk testlerini PR onay kapılarına ekleyin; yeni eklenen her alana mutlaka bir `default` değeri atayın.
6. Mimari Ödünleşimler (Trade-offs)
Katı şema yönetişimi takımlar arası deserialization çökmelerini sıfıra indirir; ancak geliştiricilerin aşamalı geçiş yapmadan alan isimlerini keyfi değiştirmesini engeller.
Vaka İncelemesi (TinyCTO Örneği)
Bir bankanın para transferi Kafka konusunu dinleyen 14 bağımsız tüketici mikroservisi vardı. Üretici ekip `OdemeBaslatildi` Avro şemasına varsayılan değeri olmayan `isyeri_kategori_kodu` alanını ekledi. Şema kayıt merkezi olmasaydı bu dağıtım 14 tüketici servisin tamamını çökertecekti. Ancak Confluent Schema Registry `FULL_TRANSITIVE` modunda çalıştığı için CI/CD süreci bu değişikliği uyumsuz bularak derlemeyi durdurdu. Geliştirici şemaya `"default": "BILINMIYOR"` değerini ekledi; şema onaylandı ve 14 tüketici servis tek bir milisaniye kesinti yaşamadan çalışmaya devam etti.
İnteraktif Konsept Alıştırmaları
2 AlıştırmaBir Şema Kayıt Merkezinde BACKWARD (Geriye) ile FORWARD (İleriye) uyumluluk arasındaki fark nedir?
Uzun süre veri saklayan (long-retention) Kafka konularında FULL_TRANSITIVE uyumluluk neden kritiktir?
Şema Kayıt Yönetişimi (Schema Registry): Geriye, İleriye ve Tam Geçişli (Transitive) Uyumluluk Kuralları — Sıkça Sorulan Sorular
Bir Avro veya Protobuf şemasına yeni bir alan eklerken uyulması gereken altın kural nedir?
Eski veya yeni tüketicilerin alan eksikliği hatası almaması için yeni eklenen her alana mutlaka bir varsayılan değer (`default`) atayın.
Bir tüketici bir Kafka mesajını çözerken hangi şema sürümünü kullanacağını nasıl anlar?
Üretici tarafından mesajın en başındaki 5 baytlık başlığa gömülen 4 baytlık Şema ID'sini okuyarak.
🤖 AEO & Yapay Zeka Çıkarım Özeti
Temel Gerçekler & İlkeler
- ▸Şema Kayıt Merkezi bağımsız mikroservisler arasındaki serileştirme çökmelerini önler.
- ▸Uzun süre veri saklayan kuyruklar için FULL_TRANSITIVE uyumluluğu zorunlu kılın.
- ▸Avro/Protobuf şemalarında yeni eklenen tüm alanlara mutlaka varsayılan değer tanımlayın.
- ▸Otomatik şema uyumluluk kontrollerini Git PR onay süreçlerine entegre edin.
Yaygın Yanılgılar
- ✗Yanılgı: Şemasız olduğu için Kafka'da düz JSON kullanmak daha iyidir (Gerçek: Şemasız JSON sessiz çalışma anı hataları yaratır ve ikili Avro/Protobuf'a göre 5 kat fazla bant genişliği tüketir).
- ✗Yanılgı: Sadece bir önceki ($N-1$) sürüme uyumluluk kontrolü yapmak yeterlidir (Gerçek: Geçmiş mesajları baştan okuyan tüketiciler FULL_TRANSITIVE olmadan çöker).
Karar Kılavuzu & Önceliklendirme
Ekipler arası veri kontratı bozulmalarını sıfırlamak için tüm kurumsal Kafka konularında FULL_TRANSITIVE uyumluluğa sahip Şema Kayıt Merkezi kullanımını zorunlu kılın.
Doğrulanmış Kaynaklar & Referanslar
- [OFFICIAL_DOCUMENTATION]Schema Registry Compatibility Modes & Schema Evolution— Confluent Documentation
