swetrix
kafka_cluster_cover

Kafka KRaft Mode Cluster Kurulumu

Yazıda, geleneksel Zookeeper bağımlılığı olmadan Apache Kafka’nın nasıl dağıtık bir yapıda konfigüre edileceği detaylandırılmıştır. Kafka’nın yeni özelliği Kraft (KRaft mode) sayesinde, daha basitleştirilmiş ve verimli bir cluster yönetimi mümkün kılınmaktadır. Kraft, Kafka’nın kendi içinde dağıtık yönetim yeteneklerini geliştirerek, cluster konfigürasyon ve yönetimini kolaylaştırır. Yazı, Kraft ile Kafka cluster kurulumunun adım adım nasıl gerçekleştirileceği üzerinde durur ve bu yöntemin getirdiği avantajları tartışır. Kraft’ın sağladığı otomasyon ve kolaylıklar sayesinde, Kafka’nın dağıtık sistemlerde daha etkin ve güvenilir bir şekilde nasıl kullanılacağı örneklerle açıklanmıştır.

Kafka Nedir?

Apache Kafka message queue sistemidir, distributed event store ve stream processing için kullanılan bir platformdur. Apache Foundation tarafından Java ve Scala’yla yazılmıştır ve açık kod kaynaklıdır . Kafka gerçek zamanlı veri akışlarını yönetmek için birleşik, yüksek verimli düşük gecikmeli bir platform olmayı amaçlar. Message queue olarak diğer benzer sistemlere göre hayli popülerdir.

Kafka Kraft Mode

Bu Kafka Cluster yapısında Kafka’nın Kraftını kullanağız, Kafka Kraft, kafka’nın zookeper’a ihtiyacı olmadan cluster yapısını yönetebileceği native bir tool. Kafka 2.8.0 versiyonlarından sonra bu tool kafka ile birlikte geliyor.

Kurulum

Gereklilikler

  • 3 tane Ubuntu Server
  • Her bir server için 4 GB RAM ve 2 core CPU
  • Serverlar kendi aralarında haberleşebilmeli (default kafka portları 9092 ve 9093)
  • Serverlarda openjdk-11-jdk kurulu olmalı.

Java Kurulumu

Her bir serverda aşağıdaki java kurulumunun yapılması gerekli, gerekli command:

sudo apt-get install openjdk-11-jdk

Her bir serverda java yüklenmeli.

Kafka Kurulumu

Örnek Server ipleri:

kafka1server = 192.168.159.135
kafka2server = 192.168.159.136
kafka3server = 192.168.159.137

İlk önce Kafka için dedicated user oluşturarak kuruluma başlayalım, Bu işlemler her bir server için yapılmalı.

sudo useradd kafka

Daha sonra aşağıdaki pathtte, kafka log dosyalarını oluşturmalısınız.

Birinci server için:

sudo mkdir -p /data/kafka/kafka1.logs

İkinci server için:

sudo mkdir -p /data/kafka/kafka2.logs

Üçüncü server için:

sudo mkdir -p /data/kafka/kafka3.logs

Yine bütün serverlar aşağıdaki klasörü oluşturun.

sudo mkdir -p /opt/kafka

Daha sonra bu dosyaların yetkilerini ve ownerlığını değiştirelim.

sudo chmod 775 -R /data/kafka /opt/kafka
sudo chown -R kafka:kafka /data/kafka /opt/kafka

Kafka’nın resmi sitesinden, versiyon belirleyip indirelim, buradaki gibi ZooKeeper kullanmadan cluster kurmak istiyorsananız, 2.8.0 versiyon üstü olmalı, benim örneğimde 3.5.0 versiyonunu kullandım. wget ile /opt/kafka dizininde indirebilirsiniz

cd /opt/kafka

sudo wget https://archive.apache.org/dist/kafka/3.5.0/kafka_2.13-3.5.0.tgz

Bütün versiyonlar için şu url’ye göz atabilirsiniz. https://kafka.apache.org/downloads

Tar unpack command:

sudo tar -xzf kafka_2.13-3.5.0.tgz

Daha sonra cluster ayarlamaları için serverlarda aşağıdaki pathdeki dosyada parametrelerde düzenlemeler yapılmalı,

/opt/kafka/kafka_2.13-3.5.0/config/kraft/server.properties

Birinci server için:

process.roles=broker,controller
node.id=1
[email protected]:9093,[email protected]:9093,[email protected]:9093
listeners=PLAINTEXT://192.168.159.135:9092,CONTROLLER://192.168.159.135:9093
advertised.listeners=PLAINTEXT://192.168.159.135:9092
log.dirs=/data/kafka/kafka1.logs

İkinci server için:

process.roles=broker,controller
node.id=2
[email protected]:9093,[email protected]:9093,[email protected]:9093
listeners=PLAINTEXT://192.168.159.136:9092,CONTROLLER://192.168.159.136:9093
advertised.listeners=PLAINTEXT://192.168.159.136:9092
log.dirs=/data/kafka/kafka2.logs

    Üçüncü server için:

    process.roles=broker,controller
    node.id=3
    [email protected]:9093,[email protected]:9093,[email protected]:9093
    listeners=PLAINTEXT://192.168.159.137:9092,CONTROLLER://192.168.159.137:9093
    advertised.listeners=PLAINTEXT://192.168.159.137:9092
    log.dirs=/data/kafka/kafka3.logs

    Daha sonra herhangi bir kafka serverından, bin altındaki aşağıdaki sh ile uudi üretilmeli.

    KAFKA_CLUSTER_ID="$(/opt/kafka/kafka_2.13-3.5.0/bin/kafka-storage.sh random-uuid)"

    Yukarıdaki command size bir uudi üretecek, bunları diğer serverlara environment olarak export etmelisiniz.

    Ürettiğiniz id yi görmek için aşağıdaki commandi kullanabilirsiniz:

    echo $KAFKA_CLUSTER_ID
    >8f2tB2hHSnSZkLkef2T2kQ

    2. ve 3. serverda bu id yi export etmek için aşağıdaki commandi kullanabilirsiniz:

    export KAFKA_CLUSTER_ID="8f2tB2hHSnSZkLkef2T2kQ"

    Daha sonra kafkayı bu uuid ile bütün serverlarda formatlamamız gerekiyor. Bunun için aşağıdaki commandi kullanabilirsiniz. (Bin klasörü altında kafka-storage.sh kullanılmalı.)

    sudo ./kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c /opt/kafka/kafka_2.13-3.5.0/config/kraft/server.properties

    Kafka Servisi

    Kafka cluster çalıştırılmaya hazır, ancak kafkayı servis haline getirmek için, aşağıdaki adımları izleyebilirsiniz:

    /etc/systemd/system pathinde, kafka.service dosyası oluşturup, içeriğide şu şekilde olmalı:

    sudo vi kafka.service
    [Unit]
    Description=kafka Service
    After=network-online.target
    Requires=network-online.target
    
    [Service]
    
    Type=simple
    Restart=on-failure
    
    User=kafka
    Group=kafka
    
    ExecStart=/opt/kafka/kafka_2.13-3.5.0/bin/kafka-server-start.sh /opt/kafka/kafka_2.13-3.5.0/config/kraft/server.properties
    ExecStop=/opt/kafka/kafka_2.13-3.5.0/bin/kafka-server-stop.sh /opt/kafka/kafka_2.13-3.5.0/config/kraft/server.properties
    WorkingDirectory=/opt/kafka/kafka_2.13-3.5.0
    
    [Install]
    WantedBy=multi-user.target

    Bütün serverlarda bu işlemi yaptıktan sonra, aşağıdaki commandlerle kafka servisini serverlarda çalıştırabilirsiniz:

    sudo systemctl daemon-reload
    sudo systemctl start kafka

    Her bootta kafka servisinin otomatik başlaması için:

    systemctl enable kafka.service

    Eğer servis statüsünde aşağıdaki gibi loglar görüyorsanız, tebrikler! Başarılı bir şekilde kafka clusterı oluşturup bunları birbirine bağladınız.

    Diğer serverlarda da servisleri başlatıp, statülerine bakabilirsiniz.

    systemctl service status kafka

    Kafka Commandleri

    Test için aşağıdaki gibi çeşitli kafka commandleri kullanabilirsiniz:

    Kafka Cluster versiyon check

    sudo /opt/kafka/kafka_2.13-3.5.0/bin/kafka-topics.sh --bootstrap-server 192.168.159.135:9092,192.168.159.136:9092,192.168.159.137:9092 --version

    Topic oluşturma:

    sudo /opt/kafka/kafka_2.13-3.5.0/bin/kafka-topics.sh --bootstrap-server 192.168.159.135:9092,192.168.159.136:9092,192.168.159.137:9092 --create --topic test

    Çeşitli partition, ve replication factor parametreleriyle topic oluşturma:

    sudo /opt/kafka/kafka_2.13-3.5.0/bin/kafka-topics.sh --bootstrap-server 192.168.159.135:9092,192.168.159.136:9092,192.168.159.137:9092 --create --topic testv1 --partitions 10 --replication-factor 3

    Var olan topicleri görüntüleme:

    sudo /opt/kafka/kafka_2.13-3.5.0/bin/kafka-topics.sh --bootstrap-server 192.168.159.135:9092,192.168.159.136:9092,192.168.159.137:9092 --list

    Var olan topiclere silme işlemi:

    sudo /opt/kafka/kafka_2.13-3.5.0/bin/kafka-topics.sh --bootstrap-server 192.168.159.135:9092,192.168.159.136:9092,192.168.159.137:9092 --delete --topic testtv1

    Daha fazlası için, aşağıdaki urllere gözatabilirsiniz:

    https://kafka.apache.org/documentation/#operations

    https://docs.confluent.io/kafka/operations-tools/topic-operations.html

    Not: Sorun oluşmaması için, kafka’nın dosyaları’nın ve log dosyalarının ownerlığına ve yetkilerine dikkat edin.

    Son olarak, herhangi bir kurulum sorununuzda bize yazabilirsiniz.

    Kaynakça

    1- Apache Kafka resmi sitesi, https://kafka.apache.org/

    2- https://docs.confluent.io/home/overview.html

    Bir yanıt yazın

    E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

    Önceki Yazı
    ansible_cover

    Ansible 101: Kurulum ve Temel Bileşenler Rehberi

    Sonraki Yazı
    grep_cover.

    grep Nedir ve Gelişmiş grep Kullanımı

    Benzer Yazılar