Change Data Capture - GCP DataStream İle Bigquery’e Gerçek Zamanlı Veri Aktarımı
Selamlar, uzun zamandır burada yazı paylaşmıyordum ama artık ufak ufak yazmaya gayret edeceğim. Yeni yıla hızlı bir giriş yapmak istedim. Artık yazılarımı hem İngilizce hem Türkçe yayınlayacağım. Her neyse bugünki önemli konumuza geçelim. Bugün sizlere GCP üzerinde Datastream kullanılarak nasıl CDC(Change Data Capture) yapılacağını ve hedef olarak Bigquery e nasıl veri gönderileceğini anlatmaya çalışacağım.
Öncelikle Datastream nedir??
GCP Datastream : İlişkisel veritabanlarından veri akışını kolaylaştırmak için tasarlanmış bir sunucusuz ve kullanımı kolay bir hizmettir. Datastream, şuan için tüm ilişkisel veritabanlarını desteklemesede hatrı sayılır DB leri destekliyor örnek vermek gerekirse MySQL, PostgreSQL, AlloyDB ve Oracle veritabanlarını destekliyor. Bu veritabanlarında olası değişiklik (ekleme, güncelleme, silme) olaylarını okuyarak (literatürde CDC deniyor) BigQuery, Cloud SQL, Cloud Storage ve Cloud Spanner gibi çeşitli hedeflere veri aktarır.
Datastream Avantajları
BigQuery’de neredeyse gerçek zamanlı insights sağlamak için düşük gecikmeli ELT (Extract, Load, Transform) işlem hatlarının sorunsuz kurulumu.
Serverless olduğu için servis kendi kendini yönetir ve fully managed bir servistir. Hizmet, minimum kesinti süresiyle gerektiğinde otomatik olarak yukarı ve aşağı ölçeklenir.
Datastream, GCP içerisindeki önemli servislere direk entegrasyonu vardır. Storage, Bigquery, SQL gibi.
Heterojen veritabanları ve uygulamalar arasında veri akışlarını senkronize etme ve birleştirme.
Gelelim DataStream’i uygulama noktalarına ve bazı use caselere.
Diyelimki elinizde Postgrede veya Oracle da tutulan bir satış tablonuz olsun ve bu tablo sürekli update ve insert alsın buradaki veriyi real time işlemeniz gerekiyor senaryo olarak çünkü önemli bir tablo ve iş birimi rapor görmek istiyor. Bu noktada sizin kurtarıcınız olarak DataStream çıkıp geliyor. CDC tam bu senaryolar için var ve DataStream bunu sağlıyor. Order tablosuna gelen her değişiklik veritabanı logları üzerinden Datastream e akıtılıyor ve sonrasında Bigquery e gönderiliyor.
Bura yazıda tamamen DataStream bağlantısına odaklanacağım için arada gerekli olan VPC ayarlarına girmeyeceğim lakin bilinmeli ki şirketin kendi iç ağında bulunan veya başka bulut üzerinde bulunan DB ler için GCP üzerinden tunnel kurulması gerekmektedir. Bununla ilgili detaylar internette mevcuttur. Bu çalışmada VPC değinmeyeceğim.
Gelelim görsellerle anlatıma…
DataStream tarafında kaynak db den veri okuyabilmesi için öncelikle bazı ayarlamaların yapılması gerekiyor; replication, publication, tablolara verilecek yetkiler vs.
Publication : Yalnızca çoğaltmak istediğiniz tablolar için publication oluşturmak önerilir. Bu, Datastream’in yalnızca ilgili verileri okumasına olanak tanır ve veritabanı ile Datastream üzerindeki yükü azaltır, ancak yinede bir şemadaki tüm tablolalar içinde publication tanımlayabilirsiniz, aşağıdaki bazı kodlar mevcut.
Eğer belli başlı tablolar için publication oluşturmak isterseniz;
CREATE PUBLICATION PUBLICATION_NAME
FOR TABLE SCHEMA1.TABLE1, SCHEMA2.TABLE2;
Eğer bir şema altındaki tüm tablolara vermek isterseniz;
CREATE PUBLICATION PUBLICATION_NAME
FOR TABLES IN SCHEMA1, SCHEMA2;
Eğer db de bulunan tüm tablolar için bunu yapmak isterseniz;
CREATE PUBLICATION PUBLICATION_NAME FOR ALL TABLES;
Publication oluşturduktan sonra sıra geldi replication oluşturmaya, replicationda aslında sizin için akışı yapacak config ayarı düşünebilirsiniz. Replication oluşturmak için;
SELECT PG_CREATE_LOGICAL_REPLICATION_SLOT('REPLICATION_SLOT_NAME', 'pgoutput');
Bu işlemde tamamlandıktan sonra gelelim DataStream’in kullanması gereken usera ve yetkilere, aşağıda nasıl user create edileceği ve gerekli haklar yer alıyor.
CREATE USER USER_NAME WITH REPLICATION LOGIN PASSWORD 'USER_PASSWORD';
ALTER USER USER_NAME createdb;
GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO USER_NAME;
GRANT USAGE ON SCHEMA SCHEMA_NAME TO USER_NAME;
ALTER DEFAULT PRIVILEGES IN SCHEMA SCHEMA_NAME GRANT SELECT ON TABLES TO USER_NAME;
Tüm bu ayarlardan sonra DataStream arayüzüne geçebiliriz.
İlk girdiğinizde Datastream sizi aşağıdaki gibi karşılar, tabi ilk başta eğer apiyi aktif etmediyseniz ilk o gelir aktif ettikten sonra aşağıdaki gibi bir ekran karşılaması lazım sizi.
İlk olarak private connectivity oluşturmamız gerekiyor, daha sonra connection profile ve akabinde stream başlaması için test gerekiyor.
Private connectivitye GCP dışındaki bir db e erişeceğimiz için ihtiyaç duyuyoruz ve db ile gcp arasında bir tünel ihtiyacımız var. Connectivity ile bu tüneli kullanmak için gerekli ayarlamaları yapıyoruz. VPC kısmına, GCP de VPC tarafında bir VPC Network oluşturduk ve bu network 2 subnet mevcut. Tabi bu subnetler başka servislerin kullanması için yaratılabilir, datastream kendi peering subnetlerini alır, sizin oluşturmanızı istemez. Burada kullanılacak VPC için poc adında demo bir networkü tanımladık. Ayrıca ip aralığınıda vermeniz gerekmektedir.
Connectivity başarılı şekilde oluşturduktan sonra sıra connection profile kısmında.
Hangi db için profil oluşturulacaksa o seçilmelidir.
Biz burada Postgreyi seçiyoruz.
Bu noktadan sonra veritabanıyla ilgili bilgileri girmek gerekiyor. Profilinize bir isim ve id vermeniz lazım daha sonra bölgeyi seçin ve sonra hangi db ye bağlantı yapacaksanız onu yazmalısınız.
Bu bilgileri girdikten sonra, aşağıdaki gibi az önce oluşturulan private connectivityi seçmek gerekecek, Connectivity method olarak vpc peeringi seçmelisiniz.
Bu ayarıda başarılı şekilde geçtikten sonra artık DB için erişimi deneyebilirsiniz, bu test size, GCP ile Postgre arasında tünel yapısının başarılı şekilde kurulduğunu gösterecektir. Eğer testten geçerseniz bu iş tamam demektir.
Artık gelelim stream işlemine. Stream işlemine gelindiğinde bizi 6 aşamalı yol beklemektedir, aşağıdaki fotoğrafta ilk aşamanın detaylarını ve sol kenarda ilgili 6 aşamayı görebilirsiniz. İlk aşama için önemli olan noktalar bölge, source ve destination kısmını doğru seçmeniz gerekiyor.
2. adımda oluşturduğumuz connection profili seçmeniz gerekiyor.
3. adımda source bilgileri girilecek. Yazının ilk başında paylaştığım replication ve publication isimlerini buraya girmeniz gerekiyor, sonrasında da hangi tablolalar vs alınacak onlar seçiliyor.
4.adımda, destinationı yani Bigquery üzerine ayarlamalar yapmak gerekiyor, tablo oluşturmayı datastream kendisi yapıyor ekstra bir ayara ihtiyaç olmuyor.
5. adıma geldiğimizde, Configurasyok kısmında, her şema için ayrı bir dataset oluşturabilirsiniz veya tüm tablolar aynı şema altında olabilir, nasıl arzu ederseniz burada karar sizin.
6. ve son adımda yapılan tüm config ayarlarının bir özetini sunuyor size datastream gözden geçiriyorsunuz ve tüm ayarlar tik yani yeşil olursa artık CDC için Datastream servisiniz hazır oluyor.
Create bastıktan sonra yaklaşık 5–10 dakika sonra Bigquery üzerinde tablolarınızı görmeye başlayabilirsiniz.
Datastream özelinde bazı uyarılarda bulunmak istiyorum, bazen veritabanındaki yüklerden dolayı veri alınırken gecikmeler olabiliyor veya veritabanı her restart edildiğinde upgrade işlemlerinde db de oluşturulan publication ve replicationlar siliniyor bu yüzden datastreamin tekrar veri alabilmesi için bunların yeniden oluşturulması gerekiyor. Bu tür durumlarda GCP üzerinde Data Freshness için bir alarm kurmayı ve veri alamadığında sistem error verdiğinde alarm kurmayı düşünebilirsiniz. Alarm sistemini Log Explorer üzerinden yönetebilirsiniz. Bir sonraki konumuzda ona değinebiliriz.
Şimdilik Datastream ile nasıl CDC yapıldığını ve Bigquery nasıl bağlantı sağlandığını anlattım. Umarım yardımcı olabilmişimdir.
SEVGİYLE KALIN..
Referanslar