# Kafka (Apache Kafka)

Adres: https://softwaredictionary.org/tr/terimler/kafka
Kategori: Backend ve API'ler
Son güncelleme: 2026-10-03
Okunuşu: kafka

Kısaca: Apache Kafka, olayları kalıcı, sıralı log'larda tutan dağıtık olay akışı platformudur; servisler onları yayımlar, gerçek zamanlı okur ya da yeniden oynatır.

## Kafka nedir?

Kafka, LinkedIn'de çok büyük hacimli etkinlik verilerini taşımak için geliştirildi ve 2011'de açık kaynak yapıldı; bugün bir Apache Software Foundation projesidir. Üreticiler (producer), "sipariş verildi" ya da "sayfa görüntülendi" gibi olayları adı olan konulara (topic) yazar. Kafka her olayı bir log'un sonuna ekler ve okunmuş olsun olmasın, ayarlanan süre boyunca saklar: günlerce, hatta süresiz.

Her konu, broker adı verilen sunuculardan oluşan bir kümeye dağıtılmış bölümlere (partition) ayrılır. Tek bir bölümdeki olaylar sırasını korur ve her birinin offset denen numaralı bir konumu vardır. Tüketiciler (consumer) kendi hızlarında okur ve offset'lerini hatırlar; böylece yavaş kalan ya da yeniden başlayan bir tüketici kaldığı yerden devam eder, yeni bir tüketici de geçmişi baştan oynatabilir.

Aynı grup adını paylaşan tüketiciler bölümleri aralarında paylaşır; böylece tüketici eklemek işi dağıtır, ayrı gruplar ise her olayı ayrı ayrı alır. Bu sayede tek bir sipariş akışı faturalamayı, kargoyu ve analitiği birbirinden bağımsız besleyebilir. Kafka; olay güdümlü mikroservislerde, etkinlik takibinde, log ve metrik hatlarında ve veritabanlarından değişiklik yakalamada (change data capture) kullanılır.

Sık yapılan bir yanlış, Kafka'nın sadece bir mesaj kuyruğu olduğu düşüncesidir. Kuyruk genellikle bir mesaj işlendiğinde onu siler; Kafka ise log'u saklar ve dilediği kadar okuyucunun geçmişe dönmesine izin verir. Bu güç operasyonel bir yükle gelir: bölümler, replikasyon ve saklama süreleri planlama ister; bu yüzden küçük sistemler çoğu zaman RabbitMQ gibi daha basit bir aracıyla başlar.

## Önemli noktalar

- Kafka olayları konu adı verilen kalıcı, sıralı ve yalnızca ekleme yapılan log'larda saklar.
- Konular, bir broker kümesine dağıtılmış bölümlere ayrılır.
- Tüketiciler kendi offset'lerini izler; kaldıkları yerden devam edebilir ya da geçmişi yeniden oynatabilir.
- Tüketici grupları bölümleri paylaşır; ayrı gruplar her olayı ayrı ayrı alır.
- Basit bir mesaj kuyruğundan daha güçlüdür, ama işletmesi de daha ağırdır.

## Örnek: Olay üretmek ve tüketmek (kafkajs ile Node.js)

```javascript
import { Kafka } from "kafkajs";

const kafka = new Kafka({ brokers: ["localhost:9092"] });

// Producer: append an event to the "orders" topic
const producer = kafka.producer();
await producer.connect();
await producer.send({ topic: "orders", messages: [{ key: "1001", value: '{"total": 49}' }] });

// Consumer: members of "billing" share the topic's partitions
const consumer = kafka.consumer({ groupId: "billing" });
await consumer.connect();
await consumer.subscribe({ topic: "orders", fromBeginning: true });
await consumer.run({ eachMessage: async ({ message }) => console.log(message.value.toString()) });
```

## Sık sorulan sorular

**Kafka bir mesaj kuyruğu mu?**

Tam olarak değil. Kuyruk gibi kullanılabilir; ama Kafka olayları okunduktan sonra da bir log'da tutar, böylece birçok tüketici aynı olayları birbirinden bağımsız okuyup sonradan yeniden oynatabilir. Klasik bir kuyruk ise mesajı işlendiğinde siler.

**Kafka konusu (topic) nedir?**

Konu, "orders" gibi adı olan bir olay akışıdır. Kümenin broker'larına dağıtılmış sıralı log'lar olan bölümlere ayrılır.

**Kafka hâlâ ZooKeeper'a ihtiyaç duyar mı?**

Hayır. Yeni sürümler kümeyi KRaft adlı yerleşik bir modla kendileri yönetir; Kafka 4.0 da ZooKeeper desteğini tamamen kaldırdı.

## Kaynaklar

- [Apache Kafka documentation](https://kafka.apache.org/documentation/)

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
