Skip to content

About

Apache Kafka ile Gerçek Zamanlı Veri Akış Hattı | Wikimedia EventStreams, Idempotent Producer, zstd & OpenSearch

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Apache Kafka ile Uçtan Uca Gerçek Zamanlı Veri Akış Hattı (Wikimedia & OpenSearch)

License Apache Kafka Java OpenSearch Redpanda Conduktor Author

Canlı Wikimedia EventStreams Akışının Idempotent Producer, Zstandard (zstd) Sıkıştırma, Dağıtık Kafka Kümesi ve OpenSearch Bulk Consumer ile İndekslenmesi.

Geliştirici Portföyü • Mimari Şema • Idempotence & zstd • Kurulum


1. Sistem Mimarisi ve Veri Akışı

Bu proje, küresel ölçekte saniyede binlerce olayın gerçekleştiği Wikimedia gerçek zamanlı akışını (EventStreams SSE) dinleyen, Apache Kafka (veya Redpanda) dağıtık mesajlaşma omurgası üzerinden geçiren ve arama/analitik motoru olan OpenSearch üzerinde toplu (bulk) olarak indeksleyen uçtan uca bir veri akış boru hattıdır (data streaming pipeline).

┌──────────────────────────────────────┐
│  Wikimedia SSE Canlı Olay Akışı      │
│  https://stream.wikimedia.org/...    │
└──────────────────┬───────────────────┘
                   │ Server-Sent Events (SSE)
                   ▼
┌──────────────────────────────────────┐
│  Kafka Producer (Java / Gradle)      │
│  • Idempotent Producer (PID + Seq)   │
│  • acks=all, min.insync.replicas=2   │
│  • Zstandard (zstd) Sıkıştırma       │
│  • Snappy / GZIP'e kıyasla %40 az CPU│
└──────────────────┬───────────────────┘
                   │ TCP (Port 9092)
                   ▼
┌──────────────────────────────────────┐
│  Apache Kafka / Redpanda Kümesi      │
│  • Topic: wikimedia.recentchange     │
│  • Conduktor Gateway & Console       │
│  • PostgreSQL State Metadata         │
└──────────────────┬───────────────────┘
                   │ Consumer Group Polling
                   ▼
┌──────────────────────────────────────┐
│  Kafka Consumer (OpenSearch Client)  │
│  • Manuel Commit (At-least-once)     │
│  • Idempotent Consumer (Message ID)  │
│  • BulkRequest Batching (500+ items) │
│  • Graceful Shutdown Hook            │
└──────────────────┬───────────────────┘
                   │ REST Bulk API (Port 9200)
                   ▼
┌──────────────────────────────────────┐
│       OpenSearch Arama Kümesi        │
│    İndeks: wikimedia / Analitik      │
└──────────────────────────────────────┘

2. Modüller ve Proje Mimarisi

  • kafka-producer-wikimedia: Wikimedia Foundation'ın Server-Sent Events (SSE) API'sine LaunchDarkly EventSource ile bağlanır. Gelen ham JSON olaylarını filtreler ve yüksek iletim hacmiyle Kafka topic'ine aktarır.
  • kafka-consumer-opensearch: Kafka kümesini dinleyen, verileri OpenSearch BulkRequest ile gruplayarak arama motoruna yazan optimize consumer modülü.
  • kafka-basics: Producer callback mekanizmaları, Consumer Rebalance Listeners ve partition bazlı anahtar (key) dağılım algoritmalarını içeren çekirdek Kafka pratikleri.
  • docker-compose.yml: Redpanda Kafka broker, Conduktor Enterprise Console, PostgreSQL ve monitoring servislerini içeren tek tıkla ayağa kalkan yerel küme ortamı.

3. Güvenilirlik ve Performans Optimizasyonları

3.1. Idempotent Producer Mimarisi (enable.idempotence=true)

Dağıtık ağlarda ağ kopması durumunda producer aynı mesajı yeniden gönderdiğinde broker'da mükerrer kayıt oluşmasını engeller:

  • Producer ID (PID) & Sıra Numarası (Sequence Number): Her producer başlatıldığında benzersiz bir PID alır ve mesajlarına artan sequence number ekler.
  • Broker Denetimi: Broker, gelen mesajın sıra numarasını hafızasındaki en son numarayla karşılaştırır; mükerrer mesajları sessizce reddederek "Exactly-Once Delivery" semantiğini garanti eder.
  • Yapılandırma:
    enable.idempotence=true
    acks=all
    retries=2147483647
    max.in.flight.requests.per.connection=5

3.2. Zstandard (zstd) Sıkıştırma ile Yüksek Verimlilik

Yüksek hacimli gerçek zamanlı veri akışında ağ bant genişliğini ve disk I/O tüketimini azaltmak için Facebook/Meta tarafından geliştirilen Zstandard (zstd) algoritması kullanılmıştır:

  • GZIP'e göre 3-5 kat daha hızlı sıkıştırma/açma.
  • Snappy'e göre %15-20 daha yüksek sıkıştırma oranı.
  • CPU yükünü minimize ederek broker ve producer genelinde gecikmeyi düşürür.

3.3. Idempotent Consumer & Bulk İndeksleme

  • Manuel Offset Yönetimi: Consumer, OpenSearch bulk yazma işlemi başarıyla tamamlanmadan offset commit yapmaz (enable.auto.commit=false).
  • Tekilleştirme (Deduplication): Wikimedia olaylarının kendi meta.id alanı OpenSearch belge ID'si (IndexRequest.id(id)) olarak kullanılır; tüketici çöküp baştan başlasa bile aynı kayıt tekrar yazılmaz (upsert).

4. Yerel Kurulum ve Çalıştırma

Gereksinimler

  • Java 17 veya üzeri
  • Docker & Docker Compose
  • Gradle 8+

1. Kafka Kümesini ve Arayüzü Başlatın

docker-compose up -d
  • Conduktor Console: http://localhost:8080
  • Kafka Broker: localhost:9092
  • OpenSearch (opsiyonel yerel veya bulut): http://localhost:9200

2. Wikimedia Producer'ı Çalıştırın

./gradlew :kafka-producer-wikimedia:run

Canlı olaylar çekilmeye ve wikimedia.recentchange konusuna iletilmeye başlar.

3. OpenSearch Consumer'ı Başlatın

./gradlew :kafka-consumer-opensearch:run

Mesajlar toplu paketler halinde OpenSearch'e indekslenir.


5. Kullanılan Teknolojiler

Bileşen Teknoloji Fonksiyon
Mesajlaşma Omurgası Apache Kafka / Redpanda Dağıtık olay akış platformu, pub-sub
Geliştirme Dili Java 17 Yüksek performanslı istemci implementasyonu
Derleme Aracı Gradle Çoklu modül (multi-project) orkestrasyonu
Arama & Analitik OpenSearch 2.x Gerçek zamanlı arama, agregasyon ve indeksleme
Olay Kaynağı LaunchDarkly EventSource HTTP Server-Sent Events (SSE) istemcisi
Küme Yönetimi Conduktor Console & Gateway Kafka izleme, şema yönetimi ve telemetri

6. Geliştirici ve İletişim

Muhammet Atmaca


7. Lisans

Bu proje Apache-2.0 lisansı altında sunulmaktadır.

About

Apache Kafka ile Gerçek Zamanlı Veri Akış Hattı | Wikimedia EventStreams, Idempotent Producer, zstd & OpenSearch

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages