Apache Kafka

KATEGORİ

https://kafka.apache.org/downloads adresine git kafka’yı indir.

Dosyaları bir klasöre çıkart. (F:/kafka/kurulum)

https://zookeeper.apache.org/releases.html adresine git ve zookeeper indir. İndirdiğin dosyayı bir klasör altına çıkart. (F:/kafka/kurulum/zookeeper)

Zookeeper conf klasörü altında zoo.cfg adlı bir dosya oluştur. Bu dosyanın içeriğini düzenle. jute.maxbuffer eklemesini yap.

Zookeeper ana dizinine giderek ‘bin\zkServer.cmd’ komutunu çalıştır. (Windows).

zoo.cfg içinde admin.serverPort=8081 gibi bir tanım yaparak local ortamda çalışıyorsan oluşabilecek çatışmaları engelle.

Kafkanın bulunduğu dizine git. Windows klasörünün altına git.

kafka-server-start.bat F:\kafka\kurulum\kafka_2.12-3.5.0\config\server.properties çalıştır.

Kadeck

Kadeck kafka verilerinin görüntülenmesi için kullanılan bir kullanıcı arayüzüdür.

Kafka tool, redpanda gibi alternatifler de vardır.

https://www.kadeck.com/get-kadeck adresine git ve kadeck toolunu indir. İndirdiğin arşivi bir klasör altına çıkart. Kadeck uygulamasını çalıştır. Yeni bağlantı alanında bir bootstrap server adresi isteyecek. Burada localde ise örneğin localhost:9092 ya da 127.0.0.1:9092.

kadeck’te bir topic oluşturmak için aşağıdaki kodu çalıştır. Kafka dizinine git: bin\windows\kafka-topics.bat –create –topic my_topic –bootstrap-server localhost:9092 –partitions 3 –replication-factor 1

spring boot gerekli dependency’ler

kafka-clients ve spring-kafka.

Örnek kod:

 String bootstrapServers = "localhost:9092";
String topic = "my_topic";    
Properties properties = new Properties();
    properties.put("bootstrap.servers", bootstrapServers);
    properties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
    properties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

    Producer<String, String> producer = new KafkaProducer<>(properties);

    try {
        for (int i = 0; i < 10; i++) {
            String key = "key_" + i;
            String value = "Hello Kafka " + i;

            ProducerRecord<String, String> record = new ProducerRecord<>(topic, key, value);
            producer.send(record);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        producer.close();
    }

Apache Kafka bir veri akışı platformudur. Ana özelliklerinden biri, yüksek performanslı, ölçeklenebilir ve dayanıklı(resilient) bir veri akışı sağlamaktır. Veriler geçici bir bellek yerine kalıcı bir dosya sistemine(disk) kaydedilir.

Verinin diskte tutulması, sistemin çökmesi veya yeniden başlatılması durumunda bile veri kaybını önler. Disk üzerindeki veri, kalıcı bir depolama alanında bulunur ve bu nedenle sistem çökse de veri korunmuş olur. Disk üzerindeki veri, Kafka kümelerindeki (cluster) birden çok broker arasında çoğaltılabilir (replication). Bu, bir brokerın çökmesi durumunda diğer brokerlardan veri kurtarılabilir ve sistemde kesinti yaşanmaz.

Diyelim ki bir Kafka konusuna yazılan mesajlar disk üzerinde saklanıyor ve bir tüketici (consumer) bu mesajları işlemek istiyor. İlk mesajları okuduktan sonra, bu mesajları diskten tekrar okumak yerine bilgisayarın belleğine (RAM) alabiliriz. Bu, disk önbelleği (disk caching) olarak adlandırılır.

Bellek haritalı dosyalar (memory mapped files), bir dosyanın içeriğini belleğe eşleme yöntemini kullanır. Bu dosyanın içeriğine bellek üzerinden doğrudan erişim sağlar.

Kafka’nın temel mimarisi genellikle bir küme (cluster) üzerinde çalışır. Bu küme bir ya da birden çok broker içerir. Her bir broker, Kafka kümesindeki bir sunucudur ve belirli bir konfigürasyona sahiptir. Kafka’da veriler konular (topic) altında organize edilir. Her konu, belirli bir türdeki verileri temsil eder. Her bir konu, bir veya daha fazla bölüme (partition) ayrılabilir. Bölümler, veriyi paralel işleme yeteneği sağlamak için kullanılır. Producer’lar, belirli bir konu altında mesajlar üreten uygulamalardır. Consumer’lar, belirli bir konudan mesajları alan ve işleyen uygulamalardır.

kCat

kafkacat’in yeni adı olan kcat, Kafka ile etkileşimde bulunmak için kullanılan bir araçtır. Terminal üzerinden ulaşılabilen bir araçtır. kcat ile Kafka konularına (topic) mesaj üretebilir, mesajları tüketebilir, konuları listeleyebilirsiniz.

macos’ta brew install kcat komutu ile kurulum yapılır. Proje docker üzerinde ayağa kaldırıldığında örneğin kcat -L -b localhost:19092 komutuyla ilgili broker ve topic bilgileri görüntülenir.

kat -b <broker_adresi> -t <topic_adı> -P -> mesaj üretimi

kat -b <broker_adresi> -t <topic_adı> -C -> mesaj tüketimi