Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124

Modern dijital ürünlerin arkasında saniyede yüz binlerce olayı yöneten görünmez bir omurga var. LinkedIn, Netflix, Uber gibi devlerin ortak noktası ise bu trafiği Apache Kafka ile yönetiyor olmaları. Peki Kafka’yı bu kadar özel yapan ne? Yalnızca ölçeklenebilir olması mı, yoksa mimaride sunduğu başka avantajlar mı var?
Bu yazıda Kafka’nın mimarisini, sunduğu faydaları, ölçeklenme stratejilerini ve dikkat edilmesi gereken noktaları profesyonel bir perspektifle ele alıyoruz.
Kafka’yı şöyle düşünebilirsin:
Kısacası:
“Sistemdeki tüm olayların geçtiği, çok hızlı çalışan bir kayıt defteri + dağıtım hattı” gibi düşünebilirsin.
Topic, Kafka’da “kategori” demek.
Örneğin:
orderspaymentsuser-login-eventsTüm mesajlar bir topic altında toplanır.
Her topic’in içinde 1 veya daha fazla partition olur. Partition’ı şöyle hayal et:
Disk üzerinde ardışık şekilde yazılan bir günlük (log) dosyası.
Append-only → sadece sona eklenir, silme yok.
Çünkü Kafka’nın performansının kalbi burasıdır.
Basit örnek:
Tek kasa olan market kuyruk oluşturur.
10 kasa açınca herkes hızlı geçer.
Kafka’daki her partition = bir kasa.
Kafka tek bir makinede çalışmaz; genelde birden fazla sunucunun (broker) bir araya gelmesiyle çalışır.
Bu sunucular birleşince cluster oluşur.
Bunu şöyle düşün:
Kafka’da da aynı mantık var:
Kafka’ya gönderilen her mesaj aslında küçük bir paket gibidir. İçinde genelde şunlar olur:
Şöyle:
Örnek:userId = 42 olan bir kullanıcının tüm işlemleri hep aynı partition’a gider.
Böylece olay akışı sırasını kaybetmezsin.
Kafka der ki:
“Tamam, o zaman ben mesajları partition’lar arasında kendim eşit şekilde dağıtayım.”
Bu da yük dengesi sağlar ama sıra garantisi olmaz.
Kafka’nın yüksek performanslı çalışıp çalışmaması çoğu zaman hangi key’i seçtiğine bağlıdır.
Key doğru seçilirse trafik eşit dağılır → sistem rahatlar.
Key yanlış seçilirse tüm yük tek bir noktaya yığılır → sistem boğulur.
Hot partition şudur:
Bir video platformu düşün (Netflix gibi).
Sen partition key olarak movieId seçtin.
Cuma akşamı yeni bir film çıktı → milyonlarca kişi aynı filmi açtı.
Ne olur?
İşte buna hot partition deniyor.
Bu problemi çözmek için key’i biraz daha akıllı yaparız.
movieId + hash(userId)
(İkisini birlikte kullanıyorsun)
Bu ne sağlar?
Aynı film izleniyor olsa bile:
Yani yük eşit bölünür → sistem rahatlar.
İster 100 milyon kişi aynı filmi açsın:
Bu da o kullanıcı için doğru sıralamayı korur.
Offset aslında Kafka’nın tuttuğu “Ben en son hangi mesajı işledim?” notudur.
Bir nevi okuma kitabındaki kaldığın sayfayı işaretlemek gibi düşün.
Kafka bunu belirli aralıklarla kaydeder (commit eder).
Bu sayede:
Yani sistem çöktü → yeniden açtın → Kafka der ki:
“En son şu mesajı işlemişti, 1 sonrasından devam ettireyim.”
Consumer aslında mesajı işlemeden, “işledim” diye işaretler.
Bu durumda veri kaybı olabilir çünkü mesaj hiç işlenmemiş olur.
Mesaj işlenir ama Kafka’ya “işledim” bilgisi geç gider.
Consumer yeniden başlarsa aynı mesajı tekrar işleyebilir.
Yani:
Offset doğru yönetilmezse sistemde garip bug’lar görünür.
Consumer group’u şöyle düşün:
Bir topic’i tüketmek istiyorsun ama çok fazla mesaj var.
Tek consumer yavaş kalır.
Bu yüzden aynı grup içinde birden fazla consumer çalıştırırsın.
Kafka’nın sağladığı güzellik şu:
Yani tüketiciler birbirinin aynısı gibi çalışır ama Kafka mesajları aralarında bölüştürür.
Gibi.
Mesela Consumer B çöktü:
Kafka der ki:
“Tamam, B’nin baktığı partition’ı şimdi A veya C alsın.”
Böylece sistem durmadan çalışmaya devam eder.
Bu da yüksek availability sağlar.
Kafka üç farklı garanti modeli sunar:
| Garanti | Açıklama | Dezavantaj |
|---|---|---|
| At most once | Çok hızlıdır | Mesaj kaybı olabilir |
| At least once | Mesaj kaybı olmaz | Duplikasyon riski |
| Exactly once | Kritik finansal sistemler için ideal | Kurulumu karmaşık ve daha yavaş |
Kafka’da her partition sadece tek bir yerde tutulmaz.
Aynı partition’ın birden fazla kopyası (replica) bulunur.
Bu yapı şöyle işler:
Follower’lar leader’ın birebir aynısını tutar.
Yani leader = aktif çalışan kopya
Follower = yedekler (backup)
Kafka burada akıllı davranır:
Bu yüzden replication Kafka’nın dayanıklılık (durability) özelliğinin temelidir.
Tipik yapı şudur:
1 leader + 2 follower = 3 replika
Bunun sağladığı fayda:
Çünkü aynı partition’ın başka brokerlarda da kopyası vardır.
acks=allMesaj producer tarafından gönderildiğinde Kafka’ya “mesajı aldın mı?” diye sorulur.
Yani:
Kritik finansal sistemlerde genelde acks=all kullanılır.
Kafka sadece mesaj kuyruğu gibi çalışmaz — gerçekten dev ölçekli sistemlerin kalbidir.
Aşağıdaki iki örnek, “Kafka neden bu kadar popüler?” sorusunun pratik karşılığıdır.
Uber gibi bir uygulamada, dünyadaki milyonlarca sürücü anlık olarak konum gönderiyor:
Bu olaylar sürekli akar.
Saniyede milyonlarca konum mesajı demek.
Uber’de tüm bu mesaj trafiği Kafka üzerinden akar.
Uber, Kafka’da coğrafi partitioning kullanıyor.
Yani:
Her bölge kendi içinde ölçekleniyor →
Bu da sistemi devasa trafiğe rağmen stabil tutuyor.
Özet:
Kafka olmasa Uber’in gerçek zamanlı harita sistemi çöker.
Bazı şirketler Kafka’yı sadece bir mesaj sistemi değil, adeta bir kayıt defteri (ledger) gibi kullanıyor.
Bu yaklaşımın adı: Event Sourcing
✔️ %100 audit trail
Her olay kaydedildiği için “Bu nasıl oldu?” sorusuna her zaman cevap vardır.
✔️ Mikroservis mimarisini güçlendirir
Her servis, olayları Kafka’dan okuyarak kendi state’ini çıkarır.
Servisler birbirine bağlı kalmaz → bağımsızca ölçeklenir.
Özet:
Kafka burada sadece bir mesajlaşma aracı değil, sistemin gerçeği (truth) haline gelir.
Kısa cevap: Hayır.
Kafka her sorunu çözen bir araç değildir.
Çok güçlü yanları var ama bazı senaryolarda doğru tercih olmaz.
Yüksek throughput → yani saniyede çok fazla mesaj işlemek.
Ama Kafka’nın zayıf olduğu alan:
Düşük latency → yani milisaniye altı tepki süreleri.
Örneğin:
Bu tür yerlerde Kafka fazla ağır kalır.
Kafka daha çok “boru hattı” gibidir, “instant cevap” değil.
Eğer tüm mesajların tek bir sırada olmasını istiyorsan (herkes için aynı sıra), Kafka burada zorlanır.
Bunu yalnızca şöyle yapabilirsin:
👉 Tüm mesajları tek partition’a yazmak.
Bu da neye yol açar?
Yani Kafka global sıra isteyen sistemler için ideal değil.
Eğer:
Kafka gereksiz yere karmaşık olur.
Zookeeper/Yeni Raft sistemi, disk yönetimi, replication, partitioning, monitoring…
Hepsi ekstra operasyon maliyeti.
Basit bir kuyruk sistemi (RabbitMQ, SQS vs.) çok daha uygun olur.
Kafka özellikle dev ölçekli sistemlerde parlıyor. Çünkü:
Servisler birbirine bağlı değildir → sistem daha dayanıklı ve geliştirilebilir olur.
Kafka bir buffer gibi davranır.
Ani yük artışları Kafka tarafından emilir.
Geçmişte olan her şeyi tekrar oynatabilirsin →
Bu, debugging için inanılmaz bir avantaj.
Bu ikisi birlikte Kafka’yı dev şirketlerin vazgeçilmezi yapıyor.
Kafka çok güçlü bir araç ama…
👉 Kurulumu, yönetimi ve doğru partitioning stratejisi uzmanlık ister.
Yanlış kurulan Kafka → yavaş, dengesiz ve sorunlu bir sisteme dönüşebilir.