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/