Skip to main content

> şema_evrimi_ve_uyumluluk_modelleri_(avro_&_protobuf)

Şema Evrimi ve Uyumluluk Modelleri (Avro & Protobuf)

Olay akışlarında ve RPC sözleşmelerinde ikili şemalar, alıcı servisleri çökertmeden veya zehirli hap (poison pill) hataları üretmeden nasıl evrilir?

ÖZET VE TEKNİK CEVAP

Merkezi bir Şema Kayıt Defteri (Schema Registry) üzerinden katı uyumluluk kuralları (Geriye, İleriye veya Tam Geçişli) zorunlu kılarak, mevcut alan etiket numaralarını asla değiştirmeyerek ve tüm yeni alanlara güvenli varsayılan değerler atayarak.

Mühendislik El Kitabı & Mekanizma

1. Temel Çalışma Mekanizması

İkili serileştirme formatları (Apache Avro, Protocol Buffers), ağ bant genişliğinden tasarruf etmek için mesaj içine alan isimlerini gömmez. Bunun yerine Protobuf sayısal alan etiketlerine (örn. `string email = 2;`), Avro ise Şema Kayıt Defterinde (Schema Registry) kayıtlı şema kimliklerine güvenir. Uyumluluk modları şemanın nasıl evrileceğini belirler: BACKWARD yeni tüketicilerin eski mesajları okumasını sağlar; FORWARD eski tüketicilerin yeni mesajları okumasını sağlar; FULL ise her iki yönü de garanti eder. CI/CD boru hatları dağıtım öncesi şemaları test eder ve uyumsuz değişiklikleri derleme aşamasında reddeder.

2. Doğru Kullanım Senaryosu

Yüzlerce bağımsız servisin ortak veri sözleşmelerini üretip tükettiği yüksek hacimli Kafka akış sistemleri, gRPC mikroservis topolojileri ve kurumsal veri gölü (data lake) mimarileri.

3. Prodüksiyon Arıza Modları

1) Zehirli Hap (Poison Pill) Çöküşü: Uyumsuz bir şemanın dağıtılması sonucu tüketicilerin serileştirme hatasıyla çökmesi ve Kafka bölümünün tamamen durması; 2) Alan Etiketi Yeniden Kullanımı: Silinen bir Protobuf alan numarasını yeni bir alana vererek veriyi sessizce bozmak; 3) Zorunlu Alan Tuzağı: Varsayılan değeri olmayan zorunlu yeni bir alan ekleyip eski üreticileri anında kırmak.

4. Teşhis ve Telemetri Sinyalleri

Kafka tüketici serileştirme çözme (deserialization) hata oranları, Schema Registry tarafından reddedilen şema kayıt sayaçları, DLQ kuyruk girişleri ve istemci serileştirme gecikmeleri.

5. Önleme ve Mimari Bariyerler

CI kapılarında Schema Registry uyumluluk modunu FULL_TRANSITIVE olarak ayarlayın; Protobuf şemalarında silinen alan numaralarını kalıcı olarak emekliye ayırmak için `reserved` anahtar kelimesini kullanın ve tüm yeni alanları varsayılan değerli opsiyonel alanlar olarak tanımlayın.

6. Mimari Ödünleşimler (Trade-offs)

Sıfır kesintili aşamalı dağıtım ve ultra hafif ikili mesaj boyutları sağlar; buna karşılık katı şema yönetişim disiplini ve Şema Kayıt Defteri operasyonel bağımlılığı getirir.

Vaka İncelemesi (TinyCTO Örneği)

TinyCTO Vaka 053: Bir geliştirici JSON alanını `user_id` yerine `userId` olarak değiştirdi; bu durum 14 analiz mikroservisinin aynı anda çökmesine ve veri akışının durmasına yol açtı. Olay omurgasının Confluent Schema Registry ve Avro'ya taşınması CI üzerinde FULL uyumluluk kontrolünü zorunlu kıldı ve sonraki 7 kırıcı şema PR'ını canlıya ulaşmadan otomatik olarak engelledi.

İnteraktif Konsept Alıştırmaları

3 Alıştırma
Q1

'Geriye Dönük' (Backward) ile 'İleriye Dönük' (Forward) şema uyumluluğu arasındaki fark nedir?

Geriye dönük uyumluluk, yeni tüketici kodunun eski üretici kodunun ürettiği mesajları okuyabilmesidir; İleriye dönük uyumluluk ise eski tüketici kodunun yeni üretici kodunun ürettiği mesajları okuyabilmesidir.
Q2

Protocol Buffers şemalarında alanları kullanımdan kaldırırken `reserved` anahtar kelimesi neden kritiktir?

Gelecekteki geliştiricilerin silinen alan numaralarını veya isimlerini yeniden kullanmasını engeller; aksi takdirde eski ve yeni sürümler ikili veriyi tamamen yanlış yorumlar.
Q3

Kafka akış bağlamında 'Zehirli Hap' (Poison Pill) mesajı nedir?

Kafka konusunda bulunan ve tüketici tarafından serileştirmesi çözülemeyen veya işlenemeyen, tüketicinin aynı ofsette sürekli çöküp yeniden başlamasına yol açan hatalı mesajdır.

Şema Evrimi ve Uyumluluk Modelleri (Avro & Protobuf) — Sıkça Sorulan Sorular

Avro, Protobuf veya JSON'a kıyasla nasıl daha küçük mesaj boyutları elde eder?

Avro serileştirilmiş veri içine ne alan isimlerini ne de etiket numaralarını koyar; yalnızca 4 baytlık bir Şema Kimlik ön eki ekler ve şema yapısını Schema Registry üzerinden çözer.

FULL uyumluluk modunda bir alan şemadan silinebilir mi?

Evet, ancak yalnızca silinen alanın önceden tanımlanmış bir varsayılan değeri varsa; böylece eski mesajları okuyan yeni tüketiciler varsayılan değeri kullanabilir.

Şema Kayıt Defteri (Schema Registry) geçici olarak erişilemez olursa ne olur?

İstemci SDK'ları bellek içi yerel şema önbellekleri tutar. Uygulamalar bilinen şema kimliklerini işlediği sürece trafik kesintisiz devam eder; yalnızca yeni şemalar kurtarma anına kadar kaydedilemez.

🤖 AEO & Yapay Zeka Çıkarım Özeti

Temel Gerçekler & İlkeler

  • Protocol Buffers 2001 yılında Google tarafından geliştirilmiştir; Apache Avro ise Hadoop veri serileştirmesi için Doug Cutting tarafından tasarlanmıştır.
  • CI boru hatlarında otomatik şema uyumluluk doğrulaması, dağıtık mikroservis kesintilerine karşı en etkili tek koruma kalkanıdır.

Yaygın Yanılgılar

  • Yüksek ölçekli olay omurgalarında JSON Schema'nın yeterli olduğunu sanmak; JSON hantaldır, sıkıştırılmamıştır, katı alan etiketi kuralı yoktur ve 5-10 kat daha fazla CPU ayrıştırma maliyeti yaratır.

Karar Kılavuzu & Önceliklendirme

Kafka olay omurgaları ve veri hatlarında Schema Registry destekli Avro'yu; senkron mikroservisler arası RPC iletişiminde ise Protocol Buffers'ı (gRPC) standartlaştırın.

Doğrulanmış Kaynaklar & Referanslar