irfo
Moderatör
- Katılım
- 7 Ocak 2026
- Mesajlar
- 183
- Tepkime puanı
- 2
- Puanları
- 18
Go ve Apache Kafka ikilisi, modern mikroservis mimarilerinde yüksek performanslı ve ölçeklenebilir Olay Güdümlü (Event-Driven) sistemler kurmak için endüstri standardı haline gelmiştir. Go'nun hafif "goroutine" yapısı, Kafka'nın devasa veri akışlarını asenkron olarak işlemek için biçilmiş kaftandır.
Go
import "github.com/segmentio/kafka-go"
func main() {
writer := &kafka.Writer{
Addr: kafka.TCP("localhost:9092"),
Topic: "siparis-olusturuldu",
Balancer: &kafka.LeastBytes{},
}
err := writer.WriteMessages(context.Background(),
kafka.Message{
Key: []byte("siparis-123"),
Value: []byte("Ürün: Laptop, Adet: 1"),
},
)
if err != nil {
log.Fatal("Mesaj gönderilemedi:", err)
}
}
1. Temel Kavramlar: Kafka Nasıl Çalışır?
Kafka'yı sadece bir "mesaj kuyruğu" (message queue) olarak değil, bir dağıtık günlük (distributed log) sistemi olarak düşünmek gerekir.- Producer (Üretici): Veriyi Kafka'ya gönderen Go servisi.
- Topic (Konu): Mesajların kategorize edildiği kanallar.
- Consumer (Tüketici): Veriyi Kafka'dan okuyup işleyen Go servisi.
- Broker: Veriyi saklayan ve yöneten Kafka sunucuları.
2. Go ile Kafka Entegrasyonu: Kütüphane Seçimi
Go ekosisteminde Kafka ile konuşmak için üç ana seçenek vardır:- confluent-kafka-go: En performanslı olanıdır. C tabanlı librdkafka kütüphanesini kullanır (CGO gerektirir).
- segmentio/kafka-go: Saf Go (pure Go) ile yazılmıştır. Kullanımı en kolay ve Go deyimlerine (idiomatic) en uygun olanıdır.
- Sarama (IBM): Uzun süredir piyasadadır, çok detaylı konfigürasyon sunar ancak API'si biraz karmaşıktır.
3. Basit Bir Producer Yazımı (segmentio/kafka-go)
Bir olay üretmek için bir Writer oluşturmamız yeterlidir.Go
import "github.com/segmentio/kafka-go"
func main() {
writer := &kafka.Writer{
Addr: kafka.TCP("localhost:9092"),
Topic: "siparis-olusturuldu",
Balancer: &kafka.LeastBytes{},
}
err := writer.WriteMessages(context.Background(),
kafka.Message{
Key: []byte("siparis-123"),
Value: []byte("Ürün: Laptop, Adet: 1"),
},
)
if err != nil {
log.Fatal("Mesaj gönderilemedi:", err)
}
}
4. Consumer Group ve Ölçekleme
Kafka'nın en güçlü özelliği Consumer Group yapısıdır. Eğer mesaj yükünüz artarsa, aynı "group id"ye sahip yeni Go servisleri ayağa kaldırarak yükü otomatik olarak paylaştırabilirsiniz. Kafka, her bir tüketiciye farklı bir Partition (bölüm) atayarak paralel işlemeyi sağlar.5. Event-Driven Mimaride Dikkat Edilmesi Gerekenler
Go ile Kafka kullanırken şu üç teknik detay sisteminizin sağlığı için kritiktir:- At-least-once Delivery: Mesajın en az bir kez işlendiğinden emin olmak için Offset yönetimini manuel yapmalısınız.
- Idempotency (Eşgüçlülük): Aynı mesaj ağ hatası nedeniyle iki kez gelebilir. Servisiniz aynı mesajı ikinci kez aldığında hata yapmamalıdır.
- Context Handling: Go'nun context yapısını kullanarak, uygulama kapanırken (graceful shutdown) Kafka bağlantılarını güvenli bir şekilde kapatmalısınız.