Kafka
Apache Kafka
- 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.
Bir bakışta
Ö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
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ı.
Sık karşılaştırılanlar
İlgili sayfalar
- Event StreamingBackend ve API'ler, s. 13Event streaming, olayları birçok uygulamanın gerçek zamanlı okuyup yeniden oynatabildiği ve işleyebildiği sürekli, sıralı, kalıcı bir log olarak kaydetmektir.
- Mesaj KuyruğuBackend ve API'ler, s. 28Mesaj kuyruğu, bir servisten gelen mesajları bir başkası işlemeye hazır olana kadar saklayan ve sistemin parçalarını eşzamansız çalıştıran bir bileşendir.
- Pub/SubBackend ve API'ler, s. 35Pub/sub, yayıncıların konulara mesaj gönderdiği ve bir konunun her abonesinin, iki taraf da birbirini tanımadan bir kopya aldığı bir mesajlaşma kalıbıdır.
- Olay Güdümlü MimariYazılım Mimarisi, s. 29Olay güdümlü mimari, servislerin bir siparişin verilmesi gibi olaylar üreterek ve bunlara tepki vererek iletişim kurduğu bir yazılım tasarım tarzıdır.
- MikroservislerYazılım Mimarisi, s. 24Mikroservisler, bir uygulamanın ağ üzerinden iletişim kuran, küçük ve bağımsız olarak dağıtılabilen servislere bölündüğü bir mimari tarzdır.
- RabbitMQBackend ve API'ler, s. 36RabbitMQ, üreticilerin mesajlarını exchange'ler üzerinden kuyruklara yönlendiren açık kaynaklı mesaj aracısıdır; tüketiciler onları alıp işi bitince onaylar.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin