Change Data Capture (CDC) Kullanarak Farklı SQL Server Veritabanları Arasında Veri Senkronizasyonu

Kurtman Çelik
inventiv
Published in
9 min readJun 4, 2024

Kullanılan Teknolojiler

  • SQL Server 2017
  • Docker (v4.30)
  • Debezium/Zookeeper (v2.6.0.Final)
  • Debezium/Kafka (v2.6.0.Final)
  • Debezium/Connect (v2.6.0.Final)
  • Kafka UI
  • Debezium UI

CDC’ye Neden İhtiyaç Duyduk?

CDC (Change Data Capture), yazılım teknolojilerinde veri değişikliklerini izlemek ve yakalamak için kullanılan bir yöntemdir. Genellikle veritabanı sistemlerinde kullanılır. CDC’nin temel amacı, bir veri kaynağında (genellikle bir veritabanı) yapılan herhangi bir değişikliği algılamak ve bu değişiklikleri takip etmek, kaydetmek veya başka bir sistemle paylaşmak için kullanılmasıdır.

Veri Senkronizasyonu: Bir veri kaynağındaki değişikliklerin diğer sistemlerle senkronize edilmesi gerekiyorsa, CDC bu işlemi otomatikleştirebilir. Bu, farklı sistemler arasında veri bütünlüğünü sağlamak için önemlidir.

Veri Entegrasyonu: CDC, farklı veri kaynakları arasında veri entegrasyonunu kolaylaştırabilir. Örneğin, bir veritabanı tablosundaki değişiklikleri algılayarak, bu değişiklikleri başka bir uygulamaya veya veritabanına aktarabilir.

Birbirine bağımlı iki sistemimizin olduğunu varsayalım. Bu sistemleri birbirinden ayırıp farklı ortamlarda çalışmasını sağlamak için bazı ortak veritabanı tablolarındaki verilerinin aktarılması gerekmektedir. Bu aşamada CDC ile mevcut tabloların veri değişim durumlarının diğer sisteme yansıtılması amaçlanmıştır.

Biz de bu yazımızda örnek olarak bazı veritabanı tablolarımızın diğer sistem veritabanına aktaracak bir uygulamanın detaylarını açıklayacağız.

Kaynak Veritabanı

CDC uygulamasını gerçekleştirebilmek için en az 2 farklı veritabanı kurulumunun olması gerekmektedir. Bunlar kaynak ve hedef olarak isimlendirilebilir.

Kaynak veritabanı üzerinde uygulanması gereken birkaç konfigürasyon adımı bulunmaktadır.

CDC için SQL Kullanıcısını Oluşturulması

Debezium/Connect sunucusunun kaynak veritabanına erişebilmesi için bir SQL kullanıcısına ihtiyacımız var. Kaynak veritabanı sunucusunda oluşturulmuş ve kaynak veritabanına erişebilen herhangi bir kullanıcı da kullanılabilir fakat CDC işlemleri read-only olarak çalıştığı için sistemin güvenliğini sağlamak amacı ile veritabanında sadece okuma yetkisi olan yeni bir kullanıcı oluşturmak mantıklı olacaktır.

Kaynak Veritabanı ve Tablolarda CDC Özelliğinin Aktifleştirilmesi

CDC kullanıcısı oluşturulduktan sonra hedef veritabanı / tablo’yu ilgilendiren ve SQL Server üzerinde çalıştırılması gereken bir takım fonksiyonlar mevcuttur. Bu fonksiyonlar CDC’nin başlangıç noktası olan ve aslında CDC için kaynak veri üzerinde izleme işlemini başlatan komutlardır.

  • sys.sp_cdc_enable_db: SQL Server’da bir veritabanını Change Data Capture (CDC) için hazırlar ve izlemeyi etkinleştirir. Bu işlemle, veritabanında yapılan veri değişikliklerini takip etmek mümkün olur.
  • sys.sp_cdc_enable_table: Belirli bir tabloyu CDC için hazırlar ve izlemeyi etkinleştirir, böylece tablodaki veri değişikliklerini izlemek mümkün olur.
  • sys.sp_cdc_disable_table: Belirli bir tablodaki CDC izlemesini durdurur ve ilgili izleme tablolarını kaldırır. Bu sayede, tablodaki veri değişikliklerinin CDC tarafından izlenmeyeceği belirtilir.
  • sys.sp_cdc_help_change_data_capture: Bir veritabanındaki CDC yapılandırması hakkında genel bir bakış sunar ve izlenen tabloların detaylarını sağlar. Bu sayede, CDC’nin hangi tabloları izlediğini ve hangi değişiklikleri takip ettiğini anlamak mümkün olur.

Kaynak veritabanında CDC’yi aktifleştirmek için şu scripti çalıştırmamız gerekmektedir:

SQL Server’da CDC Aktiflenmiş Tabloların Kontrolü

Daha önceden aktif hale getirilmiş, CDC tarafından izlenen tablolar hakkında bilgi almak için aşağıdaki sorgular kullanılabilir.

USE SourceDB

SELECT * FROM sys.databases WHERE is_cdc_enabled = 1
SELECT * FROM sys.tables WHERE is_tracked_by_cdc = 1

Sanallaştırılmış CDC Ortamının Kurulumu

CDC ortamı için kullandığımız Debezium imajlarını Docker üzerinde çalıştıracağız. Docker kurulumu için aşağıdaki yazıda “Docker Kurulumu” başlığını inceleyebilirsiniz.

Debezium (Zookeeper / Kafka / Connect) Uygulamalarının Kurulumu

Kurulumlar için gerekli olan Debezium imajlarını docker ortamına indirmemiz gerekmektedir.

docker pull quay.io/debezium/zookeeper:2.6.0.Final
docker pull quay.io/debezium/kafka:2.6.0.Final
docker pull quay.io/debezium/connect:2.6.0.Final
docker pull provectuslabs/kafka-ui:latest
docker pull debezium/debezium-ui:latest

Docker ortamında imajları orkestre etmek için Portainer aracını kullanıyoruz. Portainer’ın kurulumu için aşağıdaki web sayfasını referans alabilirsiniz.

Container imajlarını Docker içerisine indirdikten sonra Portainer üzerinde veya Docker Compose kullanarak servis tanımlamalarını yapmamız gerekli. Tüm kurulum için gerekli YAML konfigürasyon dosyası içeriğini aşağıda bulabilirsiniz.

version: "3.2"
services:
zookeeper_01:
image: debezium/zookeeper:2.6.0.Final
ports:
- 2181:2181
networks:
- cdc_network

kafka_01:
image: debezium/kafka:2.6.0.Final
ports:
- 9091:9091
- 29091:29091
networks:
- cdc_network
links:
- cdc_zookeeper_01
depends_on:
- cdc_zookeeper_01
environment:
BROKER_ID: 1
HOST_NAME: cdc_kafka_01
ADVERTISED_HOST_NAME: cdc_kafka_01
ZOOKEEPER_CONNECT: cdc_zookeeper_01:2181
KAFKA_LISTENERS: INSIDE://0.0.0.0:29091,OUTSIDE://0.0.0.0:9091
KAFKA_ADVERTISED_LISTENERS: INSIDE://cdc_kafka_01:29091,OUTSIDE://[HOST_IP]:9091
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
KAFKA_BROKER_ID: 1
KAFKA_HOST_NAME: cdc_kafka_01
KAFKA_ADVERTISED_HOST_NAME: cdc_kafka_01

connect_01:
image: debezium/connect:2.6.0.Final
ports:
- 8083:8083
networks:
- cdc_network
links:
- cdc_kafka_01
depends_on:
- cdc_kafka_01
environment:
- BOOTSTRAP_SERVERS=cdc_kafka_01:29091
- CONFIG_STORAGE_TOPIC=cdc_connect_configs
- OFFSET_STORAGE_TOPIC=cdc_connect_offsets
- STATUS_STORAGE_TOPIC=cdc_connect_statuses
- CONNECT_TOPIC_CREATION_ENABLE=true
- GROUP_ID=1

kafka_ui:
image: provectuslabs/kafka-ui:latest
ports:
- 8081:8080
networks:
- cdc_network
links:
- cdc_kafka_01
depends_on:
- cdc_kafka_01
environment:
- DYNAMIC_CONFIG_ENABLED=true

debezium_ui:
image: debezium/debezium-ui:latest
ports:
- 8080:8080
networks:
- cdc_network
depends_on:
- cdc_kafka_01
- cdc_connect_01
links:
- cdc_kafka_01
- cdc_connect_01
environment:
- KAFKA_CONNECT_URIS=http://cdc_connect_01:8083

networks:
cdc_network:
external: true

Zookeeper Konfigürasyonu

ZooKeeper, Debezium’un çalışma durumunu izlemek ve koordine etmek için kullanılır. Debezium kümesindeki farklı hizmetlerin (örneğin, kaynaklar, hedefler, işleyiciler) durumunu izlemek ve bu hizmetler arasındaki iletişimi sağlamak için ZooKeeper kullanılır.

zookeeper_01:
image: debezium/zookeeper:2.6.0.Final
ports:
- 2181:2181
networks:
- cdc_network

YML dosyasının bu kısmında Kafka koordinasyonu için gerekli olan Zookeeper servisinin tanımı mevcut. Zookeeper kendi başına çok fazla konfigürasyon gerektirmiyor. Bizim senaryomuzda Zookeeper, Kafka ve Connect servislerinin aynı network ortamında çalışmasını istediğimiz için ekstra olarak Docker üzerinde “cdc_network” adında yeni bir ağ oluşturduk ve Zookeeper’ın bu ağ üzerinde 2181 port’u üzerinden istek dinlemesini sağladık.

Kafka Konfigürasyonu

Kafka, gerçek zamanlı veri akışlarını işlemek ve depolamak için kullanılan açık kaynaklı bir dağıtık veri akışı platformudur. Kafka, büyük miktarda veriyi gerçek zamanlı olarak işlemek için tasarlanmıştır. Yüksek performanslı bir mesaj sırası (messaging queue) sistemi olarak çalışır ve binlerce mesajı saniyeler içinde işleyebilir.

kafka_01:
image: debezium/kafka:2.6.0.Final
ports:
- 9091:9091
- 29091:29091
networks:
- cdc_network
links:
- cdc_zookeeper_01
depends_on:
- cdc_zookeeper_01
environment:
BROKER_ID: 1
HOST_NAME: cdc_kafka_01
ADVERTISED_HOST_NAME: cdc_kafka_01
ZOOKEEPER_CONNECT: cdc_zookeeper_01:2181
KAFKA_LISTENERS: INSIDE://0.0.0.0:29091,OUTSIDE://0.0.0.0:9091
KAFKA_ADVERTISED_LISTENERS: INSIDE://cdc_kafka_01:29091,OUTSIDE://[HOST_IP]:9091
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
KAFKA_BROKER_ID: 1
KAFKA_HOST_NAME: cdc_kafka_01
KAFKA_ADVERTISED_HOST_NAME: cdc_kafka_01

Kafka varsayılan olarak 9091 portundan çalışır, fakat istenilen senaryoya göre birden fazla Listener tanımlanarak farklı portlarda çalışabilir. Biz kendi senaryomuzda Kafka’ya hem aynı ağ üzerindeki Connect (INSIDE) tarafından hem de dışarıdan bağlanacağımız için KAFKA_LISTENERS ortam değişkeninde özel tanımlamalar yaptık. ZOOKEEPER_CONNECT ortam değişkeninde ise bir önceki adımda konfigüre ettiğimiz Zookeeper servisinin Docker ağ’ı üzerindeki host adını vererek bu Kafka servisi çalışmaya başladığında koordinatör olarak bu servise bağlanmasını sağladık.

Connect Konfigürasyonu

Debezium Connect, veri tabanlarından gerçek zamanlı veri değişikliklerini yakalamak ve bunları Kafka’ya aktarmak için kullanılan bir Kafka Connect eklentisidir. Debezium, veritabanlarında yapılan değişiklikleri (örneğin, INSERT, UPDATE, DELETE işlemleri) gerçek zamanlı olarak yakalar. Bu, veri tabanlarının güncel durumunu anlık olarak takip etmeyi sağlar.

connect_01:
image: debezium/connect:2.6.0.Final
ports:
- 8083:8083
networks:
- cdc_network
links:
- cdc_kafka_01
depends_on:
- cdc_kafka_01
environment:
- BOOTSTRAP_SERVERS=cdc_kafka_01:29091
- CONFIG_STORAGE_TOPIC=cdc_connect_configs
- OFFSET_STORAGE_TOPIC=cdc_connect_offsets
- STATUS_STORAGE_TOPIC=cdc_connect_statuses
- CONNECT_TOPIC_CREATION_ENABLE=true
- GROUP_ID=1

BOOTSTRAP_SERVERS ortam değişlenini güncelleyerek Connect servisi çalışmaya başladığında yine “cdc_network” ağında tanımladığımız Kafka servisine bağlanmasını sağladık.
CONFIG_STORAGE_TOPIC, OFFSET_STORAGE_TOPIC, STATUS_STORAGE_TOPIC ortam değişkenlerinde Connect servisinin SQL Server’dan okuduğu veriler, kafkaya aktardığı veriler ve çalışma statüsünü tutacağı Kafka topic’lerinin isimlerini belirlemiş olduk.
CONNECT_TOPIC_CREATION_ENABLE=true satırı ile eğer Connect servisinin oluşturacağı Topic, Kafka üzerinde daha önceden oluşturulmamış ise Connect’in veri yazmadan önce ilgili Topic’i kendisinin oluşturmasını belirttik.

Connector’ların Tanımlanması

Connector’lar, Debezium Connect’te yapılandırılır ve yönetilir. Veri akışı sağlamak için kaynak sistemle veya hedef sistemle iletişim kurarlar ve bu veriyi Kafka’ya aktarır veya Kafka’dan alır. Bu sayede, Kafka Connect aracılığıyla farklı sistemler arasında veri akışı kolayca kurulabilir ve yönetilebilir hale gelir.

Örnek senaryomuzda kaynak veritabanı tablosu için 1 source connector ve hedef veritabanına aktarım için 1 sink connector tanımlaması yapıyor olacağız.

Kaynak Veritabanı için Source Connector Tanımlanması

Source Connector’lar, X veri kaynağına bağlanarak okudukları veriyi Kafka Topic’lerine aktaran connector tipleridir. Debezium Connect 2.6.0 içerisinde SQL Server, MySql, PostgreSql, MongoDB gibi popüler veritabanı sunucularına bağlanmak için gerekli connector’lar kurulu olarak bulunur.
Debezium Connect SQL Server Connector’u ile ilgili detaylı bilgi için:

Docker üzerinde çalışan Connect servisine yeni bir source connector eklemek için aşağıdaki curl satırını çalıştırmalıyız. Bu Connector ile kaynak veritabanında bulunan dbo.SourceTable tablosu için aktif hale getirdiğimiz CDC verileri Connect üzerinden Kafka’ya aktarılacak ve source_db.dbo.source_table adında bir Topic’e kaydedilecektir.

curl --location 'http://192.168.100.235:8083/connectors' \
--header 'Content-Type: application/json' \
--data '{
"name": "source-connector",
"config": {
"connector.class": "io.debezium.connector.sqlserver.SqlServerConnector",
"database.hostname": "SOURCE_DB",
"database.port": "1433",
"database.user": "cdc_user",
"database.password": "Password",
"database.names": "SourceDB",
"database.encrypt": "false",
"database.trustServerCertificate": "true",
"database.applicationIntent": "ReadOnly",
"topic.prefix": "cdc_db",
"table.include.list": "dbo.SourceTable",
"snapshot.isolation.mode": "snapshot",
"schema.history.internal.kafka.bootstrap.servers": "KAFKA_HOST:9091",
"schema.history.internal.kafka.topic": "schemahistory.source_db",
"decimal.handling.mode": "string",
"key.converter": "org.apache.kafka.connect.json.JsonConverter",
"key.converter.schemas.enable": "true",
"value.converter.schemas.enable": "true",
"value.convertor": "org.apache.kafka.connect.json.JsonConverter",
"transforms": "reroute_topic,unwrap",
"transforms.reroute_topic.type": "io.debezium.transforms.ByLogicalTableRouter",
"transforms.reroute_topic.key.enforce.uniqueness": "false",
"transforms.reroute_topic.topic.regex": "(.*)dbo.SourceTable(.*)",
"transforms.reroute_topic.topic.replacement": "source_db.dbo.source_table",
"transforms.unwrap.type": "io.debezium.transforms.ExtractNewRecordState",
"transforms.unwrap.drop.tombstones": "false",
"name": "source-connector"
}
}'
  • connector.class (gerekli): SQL Server için Debezium Connect içerisinde gelen Connector plugin’inin sınıf ismini belirtir.
  • database.hostname (gerekli) & database.port : Connect’in bağlanacağı SQL Server sunucusunun network üzerindeki host ad’ı (veya ip adresi) ve port bilgisi.
  • database.user (gerekli) & database.password (gerekli): Connect’in bağlanacağı SQL Server sunucusu üzerinde; aktif durumda ve sunucuya bağlantı izni olan SQL kullanıcısının adı ve şifresi.
  • database.names (gerekli): Connect’in izleyeceği tabloları barındıran veritabanının adı.
  • database.encrypt : Parametresi true olarak ayarlanırsa, Debezium SQL Server Connector, SQL Server ile iletişim kurarken şifreleme kullanacaktır. Bu durumda, bağlantı sırasında veri şifrelenerek güvenli bir iletişim sağlanır. Özellikle, veritabanı sunucusu ve istemci arasında güvenli bir bağlantı gerekiyorsa veya şifreleme gereksinimleri varsa bu parametre etkinleştirilebilir.
  • database.trustServerCertificate: Bu parametre, SQL Server’a güvenli bir bağlantı kurulması gerekip gerekmediğine ve sunucu sertifikasının doğrulanıp doğrulanmayacağına bağlı olarak değişiklik gösterebilir. Güvenlik gereksinimlerine uygun şekilde bu parametrenin uygun şekilde yapılandırılması önemlidir.
  • database.applicationIntent: Özellikle, SQL Server Always On Yüksek Erişilebilirlik Grupları (High Availability Groups) gibi yüksek erişilebilirlik özelliklerini kullanan senaryolarda önemlidir. Bu parametre, bağlantının okuma-yazma (ReadWrite) işlemleri veya salt okuma (ReadOnly) işlemleri için yapıldığını belirler.
  • table.include.list (gerekli): CDC kapsamında Connect’in SQL Server’da takip edeceği veritabanı tablolarının isimlerini belirtir. Arasına virgül karakteri eklenerek birden fazla tablo ismi verilebilir.
  • schema.history.internal.kafka.bootstrap.servers (gerekli): Connect’in SQL Server’da yakaladığı değişiklikleri saklayacağı Kafka sunucusunun network host adı (veya ip adresi) ve port bilgisi.
  • schema.history.internal.kafka.topic: Connect’in bağlandığı SQL Server’da bulduğu schema değişikliklerini yazacaği Topic ismi.
  • transforms.reroute_topic.topic.regex: Kaynak veritabanından gelen CDC değişikliklerinde aranacak tablo ismini belirtir. Bu değer Connect’in, Kafka üzerinde Topic oluşturması sırasında hangi tablonun hangi topic ile eşleşeceğini belirlenme formülünde tablo ismini belirtir.
  • transforms.reroute_topic.topic.replacement: CDC’den gelen değişiklikler işlenirken transforms.reroute_topic.topic.regex değerinde belirtilen tablo ismi bulunur ise bu parametreye denk gelecek şekilde bir Topic oluşturulur.

Hedef Veritabanı için Sink Connector Tanımlanması

Sink Connector’lar, başka bir Source Connector’un önceden Kafka’ya aktardığı verileri okur ve hedef olarak konfigüre edilen bir ortama kopyasını kaydederler.

Örnek senaryomuzda Debezium Connect içerisinde gelen JDBC Sink Connector pluginini kullanacağız. JDBC Connector ile ilgili detaylı bilgiye aşağıdaki web sayfasından erişebilirsiniz.

TARGET_DB adlı hedef veritabanına source_db.dbo.source_table adlı bir Topic’den veri aktarımı yapan Sink Connector tanımını şu şekilde yapabiliriz:

{
"name": "jdbc-connector",
"config": {
"connector.class": "io.debezium.connector.jdbc.JdbcSinkConnector",
"tasks.max": "1",
"connection.url": "jdbc:sqlserver://TARGET_DB:1433;databaseName=TargetDB;encrypt=false;trustServerCertificate=true",
"connection.username": "cdc_user",
"connection.password": "Password",
"pk.mode": "record_key",
"insert.mode": "upsert",
"auto.create": "true",
"auto.evolve": "true",
"delete.enabled": "true",
"primary.key.mode": "record_key",
"schema.evolution": "basic",
"topics": "source_db.dbo.source_table",
"table.name.format": "TargetTable",
"quote.identifiers": "true"
}
}
  • connector.class (gerekli): Bu sink connector’ın kullanılacak sınıfını belirtir. Bu örnekte, Debezium’un JDBC sink connector’ı kullanılır.
  • connection.url (gerekli): SQL Server veritabanına bağlantı URL’sini belirtir. Bağlantıda kullanılacak parametreler (örneğin, şifreleme ve sertifika doğrulama) bu URL’de belirtilir.
  • connection.username (gerekli) & connection.password (gerekli): SQL Server veritabanına bağlanmak için kullanılacak kullanıcı adı ve parolayı belirtir.
  • insert.mode: Hedef veritabanına yazma işlemi yapılır iken kaynak veritabanındaki satırın bir güncelleme olarak mı ya da yeni bir satır olarak mı ekleneceğini belirtir (INSERT veya UPSERT değerlerini alır)
  • auto.create: Hedef veritabanında veri yazılacak tablo önceden oluşturulmamış ise ilk gelen CDC güncellemesinde bu tablonunda oluşturulmasını sağlar.
  • auto.evolve: Kaynak veritabanından gelen schema güncellemelerinin hedef tabloya da aktarılmasını sağlar.
  • delete.enabled: Kaynak veritabanından silinen bir verinin hedef tabloda da silinmesini sağlar.
  • topics: Hedef veritabanına yazılacak verilerin hangi Kafka Topic’inden okunacağını belirtir.
  • table.name.format: Hedef veritabanında oluşturulacak tablo ismini belirtir.
  • quote.identifiers: Kaynak veritabanındaki schema (tablo, sütun) isimlendirmelerinin kaynakdaki gibi hedef veritabanına da aktarılması için kullanılır.

Hedef Veritabanı

Kaynak veritabanındaki yapılan işlemlere benzer olarak hedef veritabanına Connect servisinin bağlanması için bir SQL kullanıcısının olması gerekir. Hedef tablonun sıfırdan yaratılacağı senaryoları da göze alırsak hedef sunucuda oluşturulan kullanıcının veritabanına yazma izni olması da gerekmektedir.

Hedef Tablonun Olduğu Senaryo

Eğer kaynak veritabanından okunan verinin hedef veritabanında da bir karşılığı var ve standart veri taşıma işlevinin yanında kaynak veritabanında yapılan şema değişikliklerinin hedef tabloya da yansıtılmasını gerektiren bir senaryomuz var ise auto.create = false, auto.evolve = true olarak işaretleme yapılması gerekmektedir. Bu parametrelere ek olarak kaynak veritabanında yapılan bir silme (Hard Delete) işleminin de hedef tabloya yansıtılmasını istiyorsak delete.enabled = true olarak işaretleme yapabiliriz. Bu konfigürasyon ile kaynak ve hedef veritabanları arasında işlemler tamamen yansıtılmış olur.

Hedef Tablonun Olmadığı Senaryo

Eğer kaynak veritabanından Kafka’ya aktarılan tablonun hedef veritabanında bir karşılığı yok veya herhangi bir nedenle başka isimde bir tabloya aktarılması gerekiyor ise Sink Connector tanımlamalarında auto.create = true ve auto.evolve = true olarak işaretleme yapılması gerekmektedir. Bu 2 parametre, Connector yeniden başlatıldığında hedef veritabanında kaynak veritabanından gelen tablo şemasını kullanarak sıfırdan bir tablo oluşturur ve aynı şemaya sahip birden fazla tablolu, arşiv tipinde veri saklama senaryolarında kullanılabilir.

Bu senaryo aynı kaynağı kullanan fakat kopyalama sırasında periyodik veya belli bir şarta göre değişen tablo isimlerinin kullanılmasına olanak sağlar. Çok büyük bir kaynak tablonun bir algoritmaya göre farklı hedef sunucularda partition olarak saklanabilmesini sağlar.

Sonuç

Böylelikle SQL Server üzerinde Debezium ile CDC işlemlerine değinmiş olduk.

Sizde Debezium’un kendi dokümantasyonunu inceleyerek daha detaylı bilgi sahibi olabilir ve kendi süreçlerinize ait özelleştirmeleri yapabilirsiniz.

Bu içeriği arkadaşlarım Mücahit Ballı ve Bayram ESER ile birlikte oluşturduk. Umarız faydalı olmuştur.

Okuduğunuz için teşekkür ederiz…

--

--