📡 Producer & Consumer
Producer & Consumer: Kafka Mesaj Akışı — Producer → Broker → Consumer "▶ Mesaj Gönder" butonuna bas: Mesajın Producer'dan partition'a, broker'a ve Consumer'a olan yolculuğunu can
Kafka Mesaj Akışı — Producer → Broker → Consumer
"▶ Mesaj Gönder" butonuna bas: Mesajın Producer'dan partition'a, broker'a ve Consumer'a olan yolculuğunu canlı izle. Sağda her adımın Kafka kodu gösterilir.
Producer — Mesaj Yazma
Kafka Producer, bir kurye deposundaki paket yönlendirme sistemi gibi çalışır: gönderici (producer) bir hedef etiketi (mesaj key'i) yapıştırır, paketi intake penceresine (broker) bırakır ve deponun yönlendirme algoritması hangi konveyör bandına (partition) gideceğine karar verir — aynı etiket her zaman aynı banda iner, böylece aynı müşteriye ait tüm paketlerin sırayla gelmesi garanti edilir. Peki producer'ın key'i neden var — bir topic'e yayınlayıp geçemez misiniz? Çünkü Kafka'nın sıralama garantisi topic bazında değil, partition bazındadır: key olmadan, event'ler partition'lar arasında round-robin dağılır ve sırasız gelebilir. Java açısından, mesaj key'i bir HashMap'teki hash key'iyle yapısal olarak aynıdır: `hash(key) % partitionSayisi` bucket'ı belirler ve aynı key her zaman aynı bucket'a eşlenir. QA açısından, sessiz hataların doğduğu yer burasıdır: testiniz aynı order ID için bir order-created event'i ve bir payment-captured event'i aynı key olmadan yayınlarsa, farklı partition'lara düşebilir ve ters sırayla consume edilebilir — böylece sipariş mevcut olmadan önce ödeme gelir; bu yalnızca partition key hash'lemesinin event'leri düzensiz dağıttığı yük altında görünen ve CI loglarında her zaman timing problemi gibi görünen bir race condition'dır.
Java Producer — Mesaj gönder
Micro Lab: Kod yazma
TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.
Key → Partition Yönlendirme
Mesaj KEY'i hangi partition'a gideceğini belirler: hash(key) % partitionSayisi. Aynı key her zaman aynı partition'a gider → ilgili mesajlar için sıralama garantisi sağlar. Örnek: key="kullanici-123" — kullanıcı 123'ün tüm siparişleri aynı partition'a gider, böylece sırayla işlenir. Key yoksa → partition'lar arasında round-robin.
producer.send() Çağrısından Callback'e Kadar Ne Olur?
ProducerRecord oluşturulur…
`ProducerRecord` oluşturulur: topic="orders", key="user-123", value=JSON — key, mesajın hangi partition'a gideceğini belirleyecek olan tek alandır.
producer.send() ASENKRON çalışır…
`producer.send()` ASENKRON çalışır — ana thread hemen devam eder, gönderim arka planda bir buffer'da kuyruğa alınır.