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
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 │
└──────────────────────────────────────┘
kafka-producer-wikimedia: Wikimedia Foundation'ın Server-Sent Events (SSE) API'sineLaunchDarkly EventSourceile 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, verileriOpenSearch BulkRequestile 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ı.
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
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.
- 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.idalanı 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).
- Java 17 veya üzeri
- Docker & Docker Compose
- Gradle 8+
docker-compose up -d- Conduktor Console:
http://localhost:8080 - Kafka Broker:
localhost:9092 - OpenSearch (opsiyonel yerel veya bulut):
http://localhost:9200
./gradlew :kafka-producer-wikimedia:runCanlı olaylar çekilmeye ve wikimedia.recentchange konusuna iletilmeye başlar.
./gradlew :kafka-consumer-opensearch:runMesajlar toplu paketler halinde OpenSearch'e indekslenir.
| 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 |
Muhammet Atmaca
- Web Sitesi: muhammetatmaca.com.tr
- GitHub: @muhammetatmaca
- E-posta: info@muhammetatmaca.com.tr
Bu proje Apache-2.0 lisansı altında sunulmaktadır.