📡 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.