Docker Compose kullanarak SQL Server ve PostgreSQL entegrasyonu ile kapsamlı bir Apache Flink CDC (Change Data Capture) ortamı.
Change Data Capture (CDC) bir veritabanında gerçekleşen veri değişikliklerini oluştukları anda izleyen ve yakalayan bir teknolojidir. Periyodik olarak değişiklikleri kontrol etmek yerine, CDC veri eklendiğinde, güncellendiginde veya silindiginde gerçek zamanlı bildirimler sağlar.
Apache Flink sistemde akış halindeki veriyi gerçek zamanlı olarak işleyen bir akış işleme framework'üdür. Düşük gecikme ve yüksek güvenilirlik ile saniyede milyonlarca olayı işleyebilir.
Birlikte: CDC veritabanı değişikliklerini anlık yakalar, Flink ise bu değişiklikleri gerçek zamanlı olarak işleyerek veriyi dönüştürür ve diğer sistemlere yönlendirir.
Bu proje aşağıdaki teknolojiler kullanarak gerçek zamanlı veri akışı ve CDC yeteneklerini göstermektedir:
- Apache Flink 1.20.0 - Akış işleme motoru
- SQL Server 2022 - CDC etkin kaynak veritabanı
- PostgreSQL 15 - İşlenmiş veriler için hedef veritabanı
- CloudBeaver - Web tabanlı veritabanı yönetim aracı
- JobManager: İş yürütme ve kaynak yönetimini koordine eder
- TaskManager1 & TaskManager2: Akış görevlerini yürütür (her biri 16 slot)
- Job Submitter: JAR dosyalarını otomatik olarak yükler ve çalıştırır
- SQL Server:
customersvesellerstabloları için CDC etkin kaynak veritabanı - PostgreSQL: Dönüştürülmüş veri depolama için hedef veritabanı
- Veri Üretici İşi (
mssql_job): Test için sentetik veri üretir - CDC İşleme İşi (
cdc_job): CDC olaylarını işler ve PostgreSQL'e yükler
- Docker ve Docker Compose
- Java 11+ (JAR dosyalarını derlemek için)
- Maven 3.6+ (projeleri derlemek için)
- Projeyi klonlayın ve dizine gidin:
git clone <repository-url>
cd cdc_docker- Tüm ortamı başlatın:
docker compose upBu kadar! Docker Compose yapılandırması gereken her şeyi içerir:
- Önceden derlenmiş Flink işleri
flink_jobs_jars/dizininde mevcuttur - Tüm servisler (Flink kümesi, SQL Server, PostgreSQL, CloudBeaver) otomatik başlar
- Flink işleri otomatik olarak submit edilir ve çalıştırılır
- Tam MSSQL → PostgreSQL veri entegrasyon pipeline'ı hemen başlar
- Servisleri doğrulayın:
- Flink Web UI: http://localhost:8081

- CloudBeaver: http://localhost:8978
İsteğe Bağlı - İşleri yeniden derle (sadece kaynak kodu değiştirirseniz):
# Veri üreticiyi derle
cd mssql_job
mvn clean package
cp target/mssql-data-generator-1.0-SNAPSHOT.jar ../flink_jobs_jars/
# CDC işini derle
cd ../cdc_job
mvn clean package
cp target/cdc_job-1.jar ../flink_jobs_jars/cdc_job-1.jar
cd ..Ortam otomatik olarak:
- Veritabanında CDC'yi etkinleştirir
- SQL Server Agent'ı başlatır (CDC için gerekli)
customersvesellerstablolarını oluşturur- Her iki tablo için CDC'yi yapılandırır
- Gerçek zamanlı değişiklik takibi için CDC capture job'larını kurar
- CDC metadata sütunları ile hedef tabloları oluşturur
- Flink işleri için bağlantıyı yapılandırır
Sistem gerekli JAR dosyalarını otomatik olarak indirir:
- PostgreSQL JDBC Sürücüsü
- SQL Server JDBC Sürücüsü
- Flink SQL Gateway API
- Flink Dashboard: İş durumu, metrikler ve logları izleyin
- CloudBeaver: Hem kaynak hem hedef veritabanlarını sorgulayın
- Docker Logları: Sorun giderme için container loglarını görüntüleyin
- Veri Üretici SQL Server'da INSERT/UPDATE/DELETE işlemleri oluşturur
- CDC değişiklikleri gerçek zamanlı olarak yakalar
- Flink veriyi işler ve dönüştürür
- İşlenmiş veri, işlem metadata'sı ile PostgreSQL'e yüklenir
PostgreSQL'de CDC verilerini kontrol edin:
-- Müşteri değişikliklerini görüntüle
SELECT * FROM customers ORDER BY cdc_timestamp DESC LIMIT 10;
-- Satıcı değişikliklerini görüntüle
SELECT * FROM sellers ORDER BY cdc_timestamp DESC LIMIT 10;
-- İşlem türüne göre sayıları
SELECT operation, COUNT(*) FROM customers GROUP BY operation;- Port çakışmaları: 8081, 1433, 5432, 8978 portlarının müsait olduğundan emin olun
- Bellek sorunları: Gerekirse Docker bellek tahsisini artırın
- İş hataları: Web UI'da Flink loglarını kontrol edin
# Belirli servis loglarını görüntüle
docker compose logs jobmanager
docker compose logs taskmanager1
docker compose logs mssql
docker compose logs postgresql
# Logları gerçek zamanlı takip et
docker compose logs -f flink-job-submitter# Belirli servisi yeniden başlat
docker compose restart jobmanager
# Tüm servisleri yeniden başlat
docker compose down && docker compose up -d
# Temiz yeniden başlatma (volume'ları kaldırır)
docker compose down -v && docker compose up -d- JAR dosyasını oluşturun ve
flink_jobs_jars/dizinine yerleştirin flink-job-submitterservisini yeniden başlatın- Flink UI'da iş yürütmesini izleyin
- SQL Server değişiklikleri için
init.sql'i güncelleyin - PostgreSQL değişiklikleri için
init_postgres.sql'i güncelleyin - Container'ları yeniden derleyin ve başlatın
- TaskManager slotları: Örnek başına 16 (toplam 32)
- Paralellik: İş başına yapılandırılabilir
- Checkpointing: Varsayılan olarak devre dışı
- SQL Server: CDC temizleme yapılandırılmış
- PostgreSQL: Sık sorgulanan sütunlarda indeksler

