Skip to content

Latest commit

 

History

History
208 lines (163 loc) · 10.1 KB

File metadata and controls

208 lines (163 loc) · 10.1 KB

Trendyol Group Data Streaming Case Study

Inglizce Doküman için: README.md

architecture

Genel Bakış

Bu depo, modern Platform Engineering pratikleriyle üretim seviyesinde, ölçeklenebilir ve gözlemlenebilir bir Kafka platformu sunar. Altyapı otomasyonu, güvenli Kafka küme kurulumu, gözlemlenebilirlik, REST API yönetimi ve dağıtık Kafka Connect işlemleri uçtan uca otomatikleştirilmiştir. Tüm bileşenler güvenilirlik, sürdürülebilirlik ve self-servis yönetim için tasarlanmıştır.


Case Study Özeti

Üretim ortamına uygun, yüksek erişilebilirlik ve gözlemlenebilirlik sağlayan, otomasyona ve yeniden üretilebilirliğe odaklanan bir Kafka altyapısı tasarlamanız ve yönetmeniz beklenmektedir. Tüm operasyonlar, testler ve senaryolar tek bir merkezi Kafka kümesi üzerinde gerçekleştirilir.

Süre: 7 gün

Senaryo:

  • Tüm platformun temelini oluşturacak tek bir Kafka kümesi kurulur.
  • Tüm kodlar üretim kalitesinde, dokümante ve versiyon kontrollü olmalıdır.
  • Altyapı otomasyonu, konteynerleştirme ve izleme en iyi pratikleri uygulanır.

Mimari Genel Bakış

Aşağıdaki diyagram, Trendyol Kafka Platform mimarisinin tüm bileşenlerini göstermektedir:

graph TB
    subgraph AUTO["Automation"]
        GHA[GitHub Actions]
        TF[Terraform]
        ANS[Ansible]
    end

    subgraph CLUSTER["Kafka Cluster"]
        subgraph BROKERS["Brokers (4 nodes)"]
            B1[Broker 1 - AZ1]
            B2[Broker 2 - AZ1]
            B3[Broker 3 - AZ2]
            B4[Broker 4 - AZ2]
        end
        
        subgraph CONTROLLERS["Controllers (3 nodes)"]
            C1[Controller 1 - AZ1]
            C2[Controller 2 - AZ2]
            C3[Controller 3 - AZ3]
        end
        
        SSL[SSL/TLS + SASL/SCRAM]
        SSL -.secure.-> BROKERS
        SSL -.secure.-> CONTROLLERS
        BROKERS <-.cluster.-> CONTROLLERS
    end

    subgraph SERVICES["Services"]
        CN1[Kafka Connect 1<br/>AZ1]
        CN2[Kafka Connect 2<br/>AZ1]
        API[REST API<br/>JWT Protected]
        MON[Monitoring<br/>Prometheus + Grafana]
    end

    GHA --> TF
    GHA --> ANS
    TF --> CLUSTER
    TF --> SERVICES
    ANS --> CLUSTER
    ANS --> SERVICES
    
    CN1 --> SSL --> BROKERS
    CN2 --> SSL
    API --> SSL
    MON -.metrics.-> CLUSTER

    style BROKERS fill:#E3F2FD,stroke:#1976D2,stroke-width:3px
    style CONTROLLERS fill:#F3E5F5,stroke:#7B1FA2,stroke-width:3px
    style B1 fill:#4A90E2,stroke:#333,stroke-width:2px
    style B2 fill:#4A90E2,stroke:#333,stroke-width:2px
    style B3 fill:#4A90E2,stroke:#333,stroke-width:2px
    style B4 fill:#4A90E2,stroke:#333,stroke-width:2px
    style C1 fill:#7B68EE,stroke:#333,stroke-width:2px
    style C2 fill:#7B68EE,stroke:#333,stroke-width:2px
    style C3 fill:#7B68EE,stroke:#333,stroke-width:2px
    style CN1 fill:#FF8C42,stroke:#333,stroke-width:2px
    style CN2 fill:#FF8C42,stroke:#333,stroke-width:2px
    style API fill:#F39C12,stroke:#333,stroke-width:2px
    style MON fill:#50C878,stroke:#333,stroke-width:2px
    style SSL fill:#C0392B,stroke:#333,stroke-width:3px
    style TF fill:#7B42BC,stroke:#333,stroke-width:2px
    style ANS fill:#E74C3C,stroke:#333,stroke-width:2px
    style GHA fill:#2C3E50,stroke:#333,stroke-width:2px
Loading
  • Modüler, tekrar kullanılabilir ve ölçeklenebilir AWS altyapısı.
  • Modüller: network, compute, security.
  • Kaynaklar:
    • Kafka Broker: 4 node (2 AZ1, 2 AZ2)
    • Kafka Controller: 3 node (1 AZ1, 1 AZ2, 1 AZ3)
    • Kafka Connect Cluster: 2 node (her ikisi AZ1)
    • Observability Node: 1 node (AZ1)
  • Confluent Platform Ansible Collection ile otomatik Kafka broker ve controller kurulumu.
  • Üretim seviyesinde güvenlik: SSL/TLS şifreleme, SASL/SCRAM kimlik doğrulama.
  • Rack awareness (fiziksel veya mantıksal olarak farklı veri merkezlerine/availability zone'lara dağıtım yaparak yüksek erişilebilirlik ve veri kaybına karşı dayanıklılık sağlar) ve çoklu AZ dağılımı.
  • İzleme için JMX metrikleri aktif.
  • Prometheus: Tüm Kafka ve Connect node’larından (JMX ve node_exporter) metrik toplar.
  • Alertmanager: Altyapı ve Kafka olayları için merkezi alarm yönetimi.
  • Grafana: Kafka Broker, Controller ve Connect için hazır dashboard’lar.
  • Node Exporter: Tüm node’larda sistem metrikleri için kurulu.
  • Tüm gözlemlenebilirlik bileşenleri Ansible ile otomatik kurulur ve yönetilir.
  • FastAPI tabanlı, AdminClient kullanan Kafka yönetim REST API’si.
  • Broker, topic, consumer group yönetimi ve topic konfigürasyonu için uç noktalar.
  • Tüm API işlemleri JWT ile korunur.
  • Docker ile paketlenmiş, Observability node üzerinde çalışır.
  • Docker Compose ile dağıtık Kafka Connect cluster kurulumu.
  • Ana Kafka cluster ile güvenli entegrasyon.
  • HTTP Source Connector, REST API’den veri çekip Kafka topic’lerine aktarır.
  • Tüm connector yaşam döngüsü Kafka Connect REST API ile yönetilir.

Temel Özellikler

  • Tek Cluster Mimarisi: Tüm modüller aynı Kafka cluster’ı üzerinde çalışır.
  • Kod ile Altyapı: Tüm altyapı Terraform ile yönetilir.
  • Otomatik Dağıtım: Ansible ve GitHub Actions ile tüm kurulum ve konfigürasyon adımları otomatikleştirilmiştir.
  • Üretim Seviyesinde Güvenlik: Uçtan uca şifreleme, güçlü kimlik doğrulama ve en iyi pratikler.
  • Kapsamlı Gözlemlenebilirlik: Tüm kritik bileşenler için metrik, dashboard ve alarm.
  • Self-servis Platform: Kolay yönetim ve genişletilebilirlik için REST API ve otomasyon scriptleri.

Dizin Yapısı


Hızlı Başlangıç

  1. GitHub Secrets yapılandırın:
    • Proje otomasyonunun (CI/CD, Terraform, Ansible vb.) sorunsuz çalışabilmesi için gerekli tüm gizli anahtarları ve kimlik bilgilerini GitHub Secrets bölümüne ekleyin.
    • Örnek olarak: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, varsa özel SSH anahtarları, DockerHub tokenları vb. gereklidir.
    • Secrets eklemek için: GitHub repo > Settings > Secrets and variables > Actions > New repository secret adımlarını izleyin.
    • Eksik veya hatalı secret, otomatik dağıtım ve silme işlemlerinin başarısız olmasına neden olur. secrets
  2. Altyapıyı Kurun:
    • AWS kimlik bilgilerinizi ayarlayın ve terraform/ dizinindeki modülleri çalıştırın.
  3. Kafka Cluster’ı Dağıtın:
  4. Gözlemlenebilirliği Kurun:
    • observability/ scriptleriyle Prometheus, Alertmanager ve Grafana’yı devreye alın.
  5. REST API’yi Dağıtın:
  6. Kafka Connect’i Dağıtın:
    • kafka_connect/ dizininde Docker Compose ile Connect cluster’ı başlatın ve connector’ları yönetin.

Otomatik Dağıtım ve Kapatma

  • Tüm altyapı ve uygulama bileşenlerini tek komutla kurmak için deploy-all.yaml (veya projenizdeki ilgili deploy-all.yaml) kullanılabilir. Bu dosya, hiçbir manuel değişiklik yapmadan tam otomatik dağıtım sağlar. Tüm modüller sıralı ve bağımlılıklarına uygun şekilde devreye alınır. deploy_all
  • Cluster’ı ve tüm kaynakları güvenli şekilde kapatmak/silmek için destroy.yaml veya ilgili destroy workflow’u kullanılır. Bu işlem, Kafka cluster’ı ve bağlı tüm altyapıyı güvenli şekilde sonlandırır. destroy
  • https://github.com/AhmetFurkanDEMIR/Trendyol-Data-Streaming-Case-Study/actions

Not: Bu işlemler sırasında herhangi bir dosya veya konfigürasyon üzerinde manuel değişiklik yapmanıza gerek yoktur. Tüm süreç otomatik ve idempotent şekilde çalışır.


Amazon CloudWatch (Logs)

Amazon CloudWatch, AWS üzerindeki kaynakların izlenmesi (monitoring), logların toplanması, alarmların üretilmesi ve otomatik aksiyonların alınması için kullanılan merkezi bir gözlemlenebilirlik (observability) servisidir.

Bu projede Amazon CloudWatch kullanılarak /var/log dizini altında yer alan sistem ve Kafka logları merkezi olarak toplanmış, güvenli bir şekilde saklanmış ve toplu arama ile analiz edilebilir hale getirilmiştir.

Bu süreç, Terraform adımında makineler init edilirken CloudWatch Agent’ın otomatik olarak kurulmasıyla gerçekleştirilmiştir. Agent, yapılandırma dosyası üzerinden /var/log altındaki logları dinleyecek şekilde konfigüre edilmiştir.

Yapılandırma dosyası

cloud_watch_logs

error.png


Dokümantasyon