Change Data Capture (CDC) ve Lakehouse’a Giriş
Günümüzün veri odaklı dünyasında işletmeler, en güncel içgörülere ihtiyaç duyar. Geleneksel batch processing yöntemleri genellikle yetersiz kalır, bu da eski verilere ve gecikmiş karar alma süreçlerine yol açar. İşte tam da burada Change Data Capture (CDC) devreye girer. CDC, verilerdeki değişiklikleri belirlemek ve izlemek için kullanılan bir yazılım tasarım kalıpları bütünüdür, böylece değişen verilerle bir eylem gerçekleştirilebilir. Bir kaynak veritabanındaki her insert, update ve delete işlemini yakalamamızı ve bu değişiklikleri gerçek zamanlı olarak stream etmemizi sağlar.
CDC’yi bir data lakehouse mimarisiyle birleştirmek, her iki dünyanın da en iyi yönlerini sunar: bir data lake’in esnekliği ve ölçeklenebilirliği ile bir data warehouse’un yapısı ve ACID işlemleri. Bu hibrit yaklaşım, taze veriler üzerinde güçlü analitik ve makine öğrenimi uygulamalarına olanak tanır. SoftCrafter olarak, e-ticaret platformlarından karmaşık web çözümlerine kadar modern uygulamalarda gerçek zamanlı verinin kritik rolünü anlıyor ve müşterilerimiz için sağlam sistemler inşa etmek amacıyla bu teknolojileri kullanıyoruz. Hizmetlerimiz ve işletmelerin veri sorunlarına nasıl yardımcı olduğumuz hakkında daha fazla bilgi edinebilirsiniz.
Kafka Connect ve Debezium: Gerçek Zamanlı CDC’nin Temeli
Apache Kafka, streaming data platformları için fiili standarttır ve yüksek oranda ölçeklenebilir, hata toleranslı ve dayanıklı bir mesajlaşma sistemi sağlar. Kafka Connect, Kafka’yı diğer sistemlerle bağlamak için bir framework’tür ve veriyi Kafka’ya ve Kafka’dan stream etmeyi kolaylaştırır. Açık kaynaklı dağıtılmış bir platform olan Debezium, Kafka Connect üzerine inşa edilmiştir ve belirli veritabanı yönetim sistemlerini (DBMS) izleyen ve tüm satır düzeyindeki değişiklikleri Kafka topic’lerine stream eden bir dizi connector sunar.
Debezium, bir CDC connector’ı olarak görev yapar ve veritabanının transaction log’unu (örn. MySQL’in binlog’u, PostgreSQL’in WAL’ı) takip eder. Bu non-intrusive yaklaşım, kaynak veritabanının performansı üzerinde minimum etki sağlar. Her değişiklik olayı, tipik olarak veritabanı tablosu başına bir topic olmak üzere, yapılandırılmış bir formatta (örn. Avro, JSON Schema) bir Kafka topic’ine yayınlanır.
İşte bir Debezium PostgreSQL connector’ı için basitleştirilmiş bir Kafka Connect yapılandırması:
{
"name": "postgres-connector",
"config": {
"connector.class": "io.debezium.connector.postgresql.PostgresConnector",
"tasks.max": "1",
"database.hostname": "your_postgres_host",
"database.port": "5432",
"database.user": "debezium_user",
"database.password": "debezium_password",
"database.dbname": "your_database",
"database.server.name": "your_logical_server_name",
"schema.include.list": "public",
"table.include.list": "public.customers,public.orders",
"topic.prefix": "softcrafter_cdc",
"plugin.name": "pgoutput",
"slot.name": "debezium_slot",
"value.converter": "org.apache.kafka.connect.json.JsonConverter",
"value.converter.schemas.enable": "false",
"key.converter": "org.apache.kafka.connect.json.JsonConverter",
"key.converter.schemas.enable": "false"
}
}
Kafka Consumer’lar ile CDC Akışlarını Lakehouse’a Aktarma
CDC olayları Kafka’ya akmaya başladıktan sonra, bir sonraki adım bunları data lakehouse’unuza aktarmaktır. Bu genellikle, Debezium tarafından oluşturulan topic’lerden okuyan ve verileri S3, ADLS veya GCS gibi bir depolama katmanına, genellikle Parquet veya Delta Lake gibi analitik için optimize edilmiş formatlarda yazan bir Kafka consumer uygulaması içerir.
Sağlam bir lakehouse için Delta Lake (veya Apache Iceberg, Apache Hudi) mükemmel bir seçimdir. ACID işlemleri, schema enforcement ve time travel yetenekleri sağlayarak data lake’inizi güvenilir bir data warehouse’a dönüştürür. Yaygın bir patern, ham CDC olaylarını lakehouse’unuzun ‘bronze’ katmanına yazmak, orijinal schema’yı ve değişiklik olayı metadata’sını korumaktır.
kafka-python kullanan basit bir Python consumer şöyle görünebilir:
from kafka import KafkaConsumerimport jsonconsumer = KafkaConsumer 'softcrafter_cdc.public.customers', bootstrap_servers=['localhost:9092'], auto_offset_reset='earliest', enable_auto_commit=True, group_id='softcrafter-lakehouse-consumer', value_deserializer=lambda x: json.loads(x.decode('utf-8')))for message in consumer: print(f"Received message: {message.value}") # Process message and write to Delta Lake # Example: write_to_delta_lake(message.value)
SoftCrafter’ın web geliştirme ve e-ticaret çözümlerindeki uzmanlığı, gerçek zamanlı dashboard’ları ve kişiselleştirilmiş kullanıcı deneyimlerini güçlendirmek için bu karmaşık veri pipeline’larını inşa etmeyi sıkça içerir.
Lakehouse’ta dbt ile Veri Dönüştürme ve Modelleme
Ham CDC verileri lakehouse’unuzun bronze katmanında olduğunda, bunları analitik kullanım durumları için dönüştürmeniz ve modellemeniz gerekir. İşte tam da burada dbt (data build tool) paha biçilmez hale gelir. dbt, veri analistlerinin ve mühendislerinin, yalnızca select ifadeleri yazarak verileri warehouse’larında dönüştürmelerini sağlar. Sürüm kontrolü, test etme ve dokümantasyon gibi yazılım mühendisliği en iyi uygulamalarını veri dönüşümlerine getirir.
CDC verileriyle dbt, ‘silver’ ve ‘gold’ katmanları oluşturmak için kullanılabilir:
- Silver Katman: Temizlenmiş, mükerrerleri giderilmiş ve potansiyel olarak birleştirilmiş CDC olayları, geçmiş bir görünüm veya kayıtların mevcut durumunu oluşturmak için kullanılır. Bu, slowly changing dimension (SCD) tip 2 mantığını uygulamayı veya güncellemeleri tek bir kayıtta birleştirmeyi içerebilir.
- Gold Katman: Raporlama, dashboard’lar ve makine öğrenimi için hazır, birleştirilmiş, denormalize edilmiş ve işe özel modeller.
CDC verileri için dbt modelleri genellikle incremental modelleri kullanır, bu da streaming bağlamında verimlilik için kritik olan, yalnızca son çalıştırmadan bu yana yeni veya değişen verileri işler.
Incremental bir update için örnek dbt modeli:
-- models/silver/customers.sql
{{ config(
materialized='incremental',
unique_key='id',
merge_update_columns=['first_name', 'last_name', 'email', 'updated_at']
) }}
WITH source_data AS (
SELECT
payload.after.id AS id,
payload.after.first_name AS first_name,
payload.after.last_name AS last_name,
payload.after.email AS email,
payload.after.updated_at AS updated_at,
op AS operation,
ts_ms AS event_timestamp
FROM {{ source('bronze', 'customers_cdc') }}
WHERE payload.after IS NOT NULL -- Filter for inserts/updates
{% if is_incremental() %}
AND ts_ms > (SELECT MAX(event_timestamp) FROM {{ this }})
{% endif %}
)
SELECT *
FROM source_data
Bu SQL, dbt’nin güçlü templating yetenekleriyle birleştiğinde, sofistike veri yönetimine olanak tanır. SoftCrafter, veri kalitesini sağlamak ve sağlam analitik temeller sunmak için kurumsal hizmetlerinde dbt’yi sıkça kullanır.
Sonuç ve Gelecek Perspektifi
Kafka Connect ve Debezium ile CDC’de uzmanlaşmak, dbt destekli bir lakehouse ile birleştiğinde, gerçek zamanlı veri alımı ve analitiği için güçlü ve esnek bir mimari sağlar. Bu yaklaşım, iş kararlarınızın her zaman en taze mevcut verilere dayanmasını sağlayarak çeviklik ve rekabet avantajı sunar. İster anında envanter güncellemelerine ihtiyaç duyan bir e-ticaret platformu, ister gerçek zamanlı kullanıcı etkinliğine dayanan bir mobil uygulama inşa ediyor olun, bu stack beklentilerinizi karşılar.
SoftCrafter olarak, işletmeleri güçlendiren ölçeklenebilir ve dayanıklı veri çözümleri oluşturmaya inanıyoruz. Ekibimiz, karmaşık veri sorunlarını çözmek için bu son teknolojileri uygulamada uzmandır. Veri stratejinizi dönüştürmek istiyorsanız, bizimle iletişime geçmekten çekinmeyin.
#CDC #KafkaConnect #Debezium #dbt #DataLakehouse #StreamingData #RealtimeAnalytics #DataEngineering