Change Data Capture: Veritabanı Değişikliklerini Olaya Çevirmek
Sözlük

Change Data Capture: Veritabanı Değişikliklerini Olaya Çevirmek

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 4 dk okuma

Change Data Capture'ın ne olduğunu, log tabanlı yaklaşımı, Debezium ile akışını, olay yapısını ve veri senkronizasyonundaki kullanımını örnekle öğrenin.

CDC (değişen veri yakalama) nedir?

CDC, İngilizce Change Data Capture ifadesinin kısaltmasıdır. Türkçede değişen veri yakalama olarak anılır. Bir veritabanındaki ekleme, güncelleme ve silme gibi değişiklikleri algılayıp bunları başka sistemlere ileten tekniktir. Amaç, tüm tabloyu baştan okumak yerine yalnızca değişenleri taşımaktır.

Bir tablodaki değişiklik gerçekleştiğinde, CDC bunu bir olay olarak üretir. Bu olay bir mesaj kuyruğuna, veri ambarına, arama dizinine ya da önbelleğe aktarılabilir. Böylece kaynak veritabanı ile bağımlı sistemler birbirine yakın senkronda kalır. CDC, veri taşımayı toplu ve gecikmeli yapıdan sürekli ve olay güdümlü yapıya çeviren temel yapı taşlarından biridir.

CDC yaklaşımları nelerdir?

Ölçüt: Zaman damgası ya da sürüm sütunu ile sorgulama. Yaklaşım: kaynak tabloya güncelleme zamanı tutan bir sütun eklenir ve belirli aralıklarla sorgu atılır. Sınırı: silinen satırlar fark edilmez, her sorgu kaynağa yük bindirir, değişiklikler gecikmeli yakalanır.

Ölçüt: Tetikleyici (trigger). Yaklaşım: her değişiklikte çalışan veritabanı tetikleyicisi, değişikliği ayrı bir tabloya yazar. Sınırı: her işleme ek yük bindirir, bakımı zordur.

Ölçüt: Log tabanlı CDC. Yaklaşım: veritabanının zaten tuttuğu işlem günlüğü okunur; PostgreSQL'de write-ahead log, MySQL'de binlog bu görevi görür. Sınırı: veritabanına özgü yapılandırma ve izin gerektirir ama kaynak sorgularına yük bindirmez, silmeleri yakalar ve işlem sırasını korur.

Bu nedenle üretim sistemlerinde log tabanlı yaklaşım sıklıkla tercih edilir. Debezium, log tabanlı CDC için kullanılan açık kaynaklı bir araçtır ve Apache Kafka ile birlikte çalışan Kafka Connect altyapısı üzerinde konnektörler olarak çalışır.

Bir CDC olayı neye benzer, süreç nasıl işler?

Bir CDC akışı genellikle şu aşamalardan geçer. Önce anlık görüntü (snapshot) alınır: konnektör ilk kez çalıştığında mevcut tablo içeriğini okur ve başlangıç durumunu olay olarak yayımlar. Sonra işlem günlüğünü sürekli izlemeye geçer ve her yeni değişikliği olay olarak üretir.

Tipik bir olay şunları taşır: • Değişikliğin türü: ekleme, güncelleme ya da silme. • Değişiklikten önceki satır değerleri ve sonraki satır değerleri. • Kaynak bilgileri: veritabanı, tablo, işlem zamanı, günlük konumu. • Şema bilgisi, yani alanların adları ve tipleri.

Olay önce bir mesaj kuyruğuna yazılır. Ardından tüketici sistemler bu olayları okuyup kendi hedeflerine uygular: ambar tablosunu güncellemek, arama dizinini yenilemek ya da önbellekten ilgili kaydı silmek gibi. Konnektör yeniden başlatıldığında kaldığı günlük konumundan devam eder, bu da veri kaybını önler.

Küçük bir örnek: sipariş tablosundan arama dizinine

Örneğin bir e-ticaret sitesinde siparişler ilişkisel bir veritabanında tutuluyor. Operasyon ekibi siparişleri arayabilmek için bir arama dizini, yöneticiler ise raporlama için bir veri ambarı kullanıyor. Gece çalışan toplu yükleme, arama dizininin ve ambarın saatlerce eski kalmasına yol açıyor.

Log tabanlı CDC kurulduğunda sipariş tablosundaki her yeni kayıt, durum güncellemesi ve iptal bir olay olarak kuyruğa düşer. Arama dizini bu olaylardan beslenir ve siparişin son durumu kısa sürede aranabilir olur. Ambar da aynı olay akışından güncellenir. Kaynak veritabanına yeni bir yük binmediği için uygulamanın performansı etkilenmez.

CDC'nin zorlukları ve ilişkili kavramlar

CDC kurulumu kolay görünse de dikkat gerektiren noktalar vardır: • Sıralama ve tutarlılık: olayların aynı kayıt için doğru sırayla uygulanması gerekir. • Şema değişikliği: kaynak tabloya sütun eklendiğinde ya da tip değiştiğinde akış bozulmamalıdır. • Tekrarlı teslim: olay bir kereden fazla gelebilir; tüketici işlemi tekrar edildiğinde aynı sonucu verecek şekilde (idempotent) tasarlanmalıdır. • Günlük birikimi: tüketici durursa veritabanında günlük dosyaları birikebilir ve disk dolabilir. Konnektör sağlığı izlenmelidir. • Hassas veri: değişiklik olayları tüm satırı taşıyabilir; gizli alanların maskelenmesi ya da filtrelenmesi gerekir.

CDC, ETL'den farklıdır: ETL genelde planlı toplu veri taşımadır, CDC ise sürekli ve değişiklik odaklıdır; ikisi birlikte de kullanılabilir. Replikasyon aynı veritabanı motoru içindeki kopyalamayı anlatırken CDC değişiklikleri farklı türdeki sistemlere ulaştırır.

Mindset kataloğundaki Change Data Capture (CDC) ve Debezium ile Veri Senkronizasyonu eğitiminin modül başlıkları CDC kavramı ve yaklaşım seçimi, Debezium mimarisi ve konnektör kurulumu, anlık görüntü, olay yapısı ve şema, dönüşüm, yönlendirme ve hedefe yazma, tutarlılık, yeniden başlatma ve hata yönetimi, izleme, performans ve bitirme projesidir.

İlgili Mindset programı

Change Data Capture (CDC) ve Debezium ile Veri Senkronizasyonu

Sık sorulanlar

Sık sorulan sorular

CDC ile ETL arasındaki fark nedir?

ETL, veriyi planlı aralıklarla toplu olarak çıkarır, dönüştürür ve hedefe yükler. CDC ise yalnızca değişen kayıtları sürekli yakalar ve olay olarak iletir. CDC gecikmeyi azaltır ve kaynağa yük bindirmez; ETL dönüşüm ve temizleme işlerinde güçlüdür. Birçok mimaride CDC veriyi taşır, dönüşüm sonradan yapılır.

Debezium nedir?

Debezium, veritabanı işlem günlüklerini okuyarak değişiklikleri olay olarak yayımlayan açık kaynaklı bir CDC aracıdır. Genellikle Apache Kafka ve Kafka Connect ile birlikte kullanılır; her veritabanı türü için ayrı bir konnektör sunar. Olayları tüketici sistemler Kafka üzerinden okur.

CDC verilerin silinmesini yakalar mı?

Log tabanlı CDC silmeleri yakalar, çünkü silme işlemi de işlem günlüğüne yazılır. Zaman damgasıyla sorgulama yöntemi ise fiziksel olarak silinen satırı göremez. Bu, silmelerin hedef sistemlere de yansıtılması gereken durumlarda log tabanlı yaklaşımı tercih nedeni yapar.

CDC her veritabanında çalışır mı?

Log tabanlı CDC, veritabanının işlem günlüğüne erişim sunmasına bağlıdır. Yaygın ilişkisel veritabanlarında bu genellikle mümkündür ama yapılandırma ve yetki gerekir. Desteklenen veritabanları ve sürümler kullanılan CDC aracının belgelerinde yayımlanır. Kurulumdan önce kullanılan veritabanı için günlük erişiminin açık olup olmadığı kontrol edilmelidir.

CDC (Değişen Veri Yakalama) Nedir? Nasıl Çalışır