10 puan yazan GN⁺ 2025-07-13 | 1 yorum | WhatsApp'ta paylaş
  • xkafka, Kafka'yı Go ortamında bir HTTP servisi kadar basit kullanmayı sağlayan açık kaynaklı bir kütüphanedir
  • Mevcut confluent-kafka-go kullanımında karmaşık işleme döngüleri ve çok sayıda boilerplate kod gerekirken, xkafka Handler, Middleware, Message yapısıyla çekirdek mantığa odaklanmayı sağlar
  • Mesaj yayımlama ve tüketme işlemlerini HTTP istek/yanıt modeli kadar sezgisel hale getirir; offset yönetimi, eşzamanlılık ayarları, hata yönetimi gibi Kafka'nın karmaşıklığını büyük ölçüde gizler
  • Streaming/Batch işleme, sıralı/eşzamansız işleme, At-most-once/At-least-once garantisi gibi gerçek servislerde gereken çeşitli kalıpları basitçe destekler
  • Katmanlı hata yönetimi, middleware tabanlı yeniden deneme/loglama/metrikler gibi pratikte ihtiyaç duyulan kalıplar kolayca uygulanabilir

HTTP benzeri Kafka

  • xkafka, Kafka'yı Go'da bir HTTP servisi gibi soyutlayan bir kütüphanedir
    • Message, bir HTTP isteğine benzer ve topic/partition/offset/key/value/header/callback gibi öğeleri içerir
    • Handler, HTTP Handler gibi iş mantığını işler
    • Middleware, loglama, metrikler, yeniden deneme gibi ek işlevlerin iş mantığından ayrılarak uygulanmasını sağlar

Mesaj yayımlama (Publishing Messages)

  • xkafka.NewProducer ile bir Producer oluşturulduktan sonra, mesaj nesnesi hazırlanıp Publish fonksiyonuyla yayımlanır
  • Eşzamansız yayımlama (AsyncPublish) ve callback kaydı mümkündür; bu da yüksek performanslı veya eşzamansız olay işlemeyi kolaylaştırır
  • Arka plandaki goroutine'ler mesaj iletimini yürütür ve callback üzerinden iletim durumu izlenebilir

Mesaj tüketimi (Consuming Messages)

  • Consumer oluşturulurken Handler fonksiyonu ile topic/broker/ayarlar gibi bilgiler belirtilir
  • consumer.Use() ile middleware eklenebilir
  • consumer.Run(ctx) ile mesaj tüketimi başlatılır

Streaming vs. Batch

  • Streaming: Mesaj geldiği anda tek tek işlenir. Düşük hacimli iş yükleri, bellek tasarrufu ve güçlü işleme garantileri için uygundur
  • Batch: Belirli sayıda mesaj veya zaman aralığına göre toplu işlenir. Yüksek throughput sistemleri veya downstream yükünü azaltmak için uygundur

Sequential veya Async

  • Varsayılan davranış sıralı işlemedir (Sequential) — bir mesaj işlenmeden sıradaki okunmaz
  • xkafka.Concurrency(N) kullanıldığında N mesajın (veya batch'in) aynı anda işlendiği eşzamansız (Async) mod desteklenir

Offset yönetimi

  • Kafka'nın varsayılan davranışında mesaj teslim edilir edilmez offset ilerletilir; bu da arıza durumunda mesaj kaybına yol açabilir
  • xkafka, enable.auto.offset.store=false ayarıyla offset'i yalnızca mesajın (veya batch'in) işlenmesi tamamlandıktan sonra saklar
  • Mesaj durumunu ayrı bir DB veya kuyrukta tutmaya gerek kalmadan, Kafka üzerinde işleme garantisi sağlanabilir
  • At-Most-Once Guarantee

    • Varsayılan olarak Kafka'nın enable.auto.commit=true davranışına göre offset arka planda commit edilir
    • xkafka.ManualCommit(true) ve sıralı işleme ile, her mesaj/batch için okumadan önce offset commit edilerek At-most-once garantisi sağlanır
  • At-Least-Once Guarantee

    • xkafka.ManualCommit(true) ile eşzamanlılık (N>1) birleştirilerek, paralel işleme sırasında da offset'ler senkron biçimde sırayla commit edilir
    • At-least-once garanti kalıbı kolayca uygulanabilir

Hata yönetimi

  • Handler seviyesi

    • Handler içinde uygulama hataları işlenebilir ve örneğin Dead Letter Queue'ya gönderim yapılabilir
    • Başarı durumunda msg.AckSuccess(), atlama durumunda msg.AckSkip(), hata durumunda msg.AckFail(err) ile açık kontrol sağlanır
  • Middleware seviyesi

    • Middleware içinde yeniden deneme, hata loglama gibi ortak mantık birden fazla Handler'da yeniden kullanılabilir
    • Farklı hata türlerine göre farklı yeniden deneme politikaları veya işleme yöntemleri kolayca uygulanabilir
  • Global seviye

    • Kafka broker/kütüphane hataları, zorunlu seçenek olan xkafka.ErrorHandler içinde merkezi olarak ele alınır
    • Bu handler non-nil bir hata döndürürse Consumer/Producer çalışması durdurulur

Sonuç

  • xkafka, Apache Kafka'nın karmaşık kullanım deneyimini Go geliştiricileri için tanıdık bir HTTP sunucu yapısına dönüştürür
  • Gereksiz boilerplate'i azaltır ve yalnızca iş mantığına odaklanılabilecek bir ortam sunar
  • Mevcut confluent-kafka-go koduna kıyasla çok daha sade ve sezgiseldir
  • Resmi dokümantasyon ve örnekler incelenerek hemen başlanabilir

1 yorum

 
penza1 2025-07-13

Hmm, Go tarafında sarama'nın daha çok tercih edildiğini biliyordum diye hatırlıyorum.. Kafka client'ı da düşünüldüğünden daha karmaşık; broker arızaları ya da istisna durumlarında gerçekten çok karmaşık hale geliyor, tüm vakaları kapsayıp kapsayamayacağı da..