Apache Kafka, dağıtık bir mesajlaşma sistemidir ve veri akışı işlemlerinde yaygın olarak kullanılır. ZooKeeper, Kafka’nın node’ları arasında senkronizasyon sağlayan ve Kafka’nın doğru çalışması için gereken koordinasyon hizmetini sunan bir bileşendir. Bu rehberde, RHEL 8 üzerinde Apache Kafka ve ZooKeeper’ın kurulumu detaylarıyla anlatılmıştır.
Ön Gereksinimler
•RHEL 8 üzerinde root veya sudo yetkisine sahip bir kullanıcı.
•OpenJDK 11 veya üstü kurulu olmalıdır. (Kafka, Java ortamına ihtiyaç duyar)
1. Java Kurulumu
Kafka, Java ortamına ihtiyaç duyduğundan, öncelikle Java kurulumunu yapalım.
# dnf install java-11-openjdk
# java -version
openjdk version "11.0.25" 2024-10-15 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.25.0.9-1) (build 11.0.25+9-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.25.0.9-1) (build 11.0.25+9-LTS, mixed mode, sharing)
2. ZooKeeper Kurulumu
Kafka’nın çalışması için ZooKeeper gereklidir, bu yüzden öncelikle ZooKeeper’ı kurmamız gerekiyor.
Adım 1: ZooKeeper’ı İndirin
Apache’nin resmi web sitesinden en güncel ZooKeeper sürümünü indirebilirsiniz veya aşağıdaki komutla direkt indirebilirsiniz: zookeper için versiyonlar ve download sayfası; https://zookeeper.apache.org/releases.html
# wget https://dlcdn.apache.org/zookeeper/zookeeper-3.7.2/apache-zookeeper-3.7.2-bin.tar.gz
--2024-10-30 14:59:10-- https://dlcdn.apache.org/zookeeper/zookeeper-3.7.2/apache-zookeeper-3.7.2-bin.tar.gz
Resolving dlcdn.apache.org (dlcdn.apache.org)... 151.101.2.132, 2a04:4e42::644
Connecting to dlcdn.apache.org (dlcdn.apache.org)|151.101.2.132|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 14198607 (14M) [application/x-gzip]
Saving to: ‘apache-zookeeper-3.7.2-bin.tar.gz’
apache-zookeeper-3.7.2-bin.tar. 100%[======================================================>] 13.54M --.-KB/s in 0.03s
2024-10-30 14:59:11 (471 MB/s) - ‘apache-zookeeper-3.7.2-bin.tar.gz’ saved [14198607/14198607]
Adım 2: ZooKeeper’ı Çıkartın ve Taşıyın
ZooKeeper arşivini çıkartın ve uygun bir dizine taşıyın (örneğin, /opt dizinine):
# tar -xvf apache-zookeeper-3.7.2-bin.tar.gz
# mv apache-zookeeper-3.7.2-bin /opt/zookeeper
Adım 3: ZooKeeper Config Dosyasını Oluşturun
ZooKeeper için konfigürasyon dosyasını oluşturun:
# mkdir /opt/zookeeper/data
# vi /opt/zookeeper/conf/zoo.cfg
zoo.cfg içeriği
tickTime=2000
dataDir=/opt/zookeeper/data
clientPort=2181
initLimit=5
syncLimit=2
•tickTime: ZooKeeper’ın durumları kontrol etme sıklığını belirler.
•dataDir: ZooKeeper’ın veri saklama dizinidir.
•clientPort: ZooKeeper’ın istemci bağlantıları için kullandığı porttur (varsayılan olarak 2181).
Adım 4: ZooKeeper’ı Başlatın
Aşağıdaki komutla ZooKeeper’ı başlatabilirsiniz: Servis olarak zookeper tanımlanabilir veya doğrudan çalıştırıılabilir
# /opt/zookeeper/bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
/opt/zookeeper/bin altında zkServer.sh ile zookper çalıştırılı stop ile durdurulur ve status ile durumu kontrol edilir. Durumunu kontrol edelim;
# /opt/zookeeper/bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: standalone
# /opt/zookeeper/bin/zkServer.sh stop
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
Zookper ı servis olarak tanımlayalım servis olarak tanımlamak için aşağıdaki dosyayı oluşturmalıyız
/usr/lib/systemd/system/zookeeper.service
[Unit]
Description=Apache ZooKeeper Centralized Service
Requires=network.target
After=network.target
[Service]
Type=forking
Restart=always
RestartSec=0s
ExecStart=/opt/zookeeper/bin/zkServer.sh start
ExecStop=/opt/zookeeper/bin/zkServer.sh stop
ExecReload=/opt/zookeeper/bin/zkServer.sh restart
[Install]
WantedBy=multi-user.target
Şimdi servisi tanımlayıp start edelim
# systemctl daemon-reload
# systemctl enable zookeeper.service
Created symlink /etc/systemd/system/multi-user.target.wants/zookeeper.service → /usr/lib/systemd/system/zookeeper.service.
# systemctl start zookeeper.service
# systemctl status zookeeper.service
● zookeeper.service - Apache ZooKeeper Centralized Service
Loaded: loaded (/usr/lib/systemd/system/zookeeper.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2024-10-30 15:39:24 UTC; 6s ago
Process: 16302 ExecStart=/opt/zookeeper/bin/zkServer.sh start (code=exited, status=0/SUCCESS)
Main PID: 16318 (java)
Tasks: 37 (limit: 22988)
Memory: 51.1M
CGroup: /system.slice/zookeeper.service
└─16318 java -Dzookeeper.log.dir=/opt/zookeeper/bin/../logs -Dzookeeper.log.file=zookeeper--server-kafka01.log -Dzo>
Oct 30 15:39:23 kafka01 systemd[1]: Starting Apache ZooKeeper Centralized Service...
Oct 30 15:39:23 kafka01 zkServer.sh[16302]: /usr/bin/java
Oct 30 15:39:23 kafka01 zkServer.sh[16302]: ZooKeeper JMX enabled by default
Oct 30 15:39:23 kafka01 zkServer.sh[16302]: Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Oct 30 15:39:24 kafka01 zkServer.sh[16302]: Starting zookeeper ... STARTED
Oct 30 15:39:24 kafka01 systemd[1]: Started Apache ZooKeeper Centralized Service.
zookeeper servis olarak açıldı çalışıyor. Artık kafka kurulumuna geçebiliriz.
3. Apache Kafka Kurulumu
ZooKeeper kurulduktan sonra Kafka’yı kurabiliriz.
Adım 1: Kafka’yı İndirin
Kafka’nın son sürümünü Apache web sitesinden indirebilir veya aşağıdaki komutu kullanabilirsiniz: https://kafka.apache.org/downloads
wget https://downloads.apache.org/kafka/3.8.1/kafka_2.12-3.8.1.tgz
Adım 2: Kafka’yı Çıkartın ve Taşıyın
Arşivi çıkartın ve Kafka’yı uygun bir dizine taşıyın (örneğin, /opt dizinine):
# tar -xvf kafka_2.12-3.8.1.tgz
# mv kafka_2.12-3.8.1 /opt/kafka
Adım 3: Kafka Config Dosyasını Düzenleyin
Kafka’nın ayarlarını server.properties dosyasından yapabilirsiniz: /opt/kafka/config/server.properties bu dosyadan aşağıdakileri düzenlemeliyiz;
•broker.id: Her Kafka sunucusuna benzersiz bir kimlik verin (örneğin, broker.id=0).
•listeners: Kafka’nın hangi IP adresi ve porttan dinleyeceğini belirler (varsayılan olarak listeners=PLAINTEXT://:9092).
•zookeeper.connect: Kafka’nın ZooKeeper ile bağlantı kurmasını sağlar. ZooKeeper’ı aynı sunucuda çalıştırıyorsanız localhost:2181 olarak ayarlayabilirsiniz.
broker.id=0
listeners=PLAINTEXT://:9092
log.dirs=/opt/kafka/logs
zookeeper.connect=localhost:2181
Kafkayı başlatmak ve durdurmak için
# /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
# /opt/kafka/bin/kafka-server-stop.sh
zookeeper ın çalıştığını doğrulamak için aşağıdaki komuttan imok mesajı almalıyız
# echo "ruok" | nc localhost 2181
imok
Kafka Konusu Oluşturma ve Mesaj Gönderme
Kafka’nın çalıştığını doğrulamak için bir topic oluşturup bir mesaj gönderelim.
1. Konu Oluşturma
# /opt/kafka/bin/kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
Created topic test-topic.
2. Mesaj Gönderme
Bir üretici (producer) başlatarak mesaj gönderin:
# /opt/kafka/bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092
>selam
Kafka içinde aynen zookeper da olduğu gibi bir servis olarak tanımlayarak çalıştıralım;
# vi /etc/systemd/system/kafka.service
[Unit]
Description=Apache Kafka
After=zookeeper.service
[Service]
Type=simple
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
Servisi yükleyip enable edip çalıştıralım
# systemctl daemon-reload
# systemctl enable kafka.service
Created symlink /etc/systemd/system/multi-user.target.wants/kafka.service → /etc/systemd/system/kafka.service.
# systemctl start kafka.service
KAFDROP
Kafka cluster’ını görselleştirmek ve yönetmek için kullanılan bir web tabanlı araçtır. Kafka konularını, partition durumlarını, mesajları ve tüketici gruplarını izlemeye yarar. Özellikle Kafka cluster’larını daha iyi izlemek ve yönetmek isteyenler için pratik bir araçtır. Kafdrop, geliştiricilere ve yöneticilere Kafka üzerindeki işlemleri daha kullanıcı dostu bir arayüz üzerinden kontrol etme imkânı sağlar.
Kafdrop GitHub sayfasından indirebiliriz aşağıda hızlıca jar dosyasını çalıştırıp kafka topic ve mesajlarını arayüz üzerinden görelim;
# wget https://github.com/obsidiandynamics/kafdrop/releases/download/3.28.0/kafdrop-3.28.0.jar
# nohup java -jar kafdrop-3.28.0.jar --kafka.brokerCOnnect=localhost:9092 &
Çalıştıktan sonra arayüze bağlanıp duruma bakalım 900o posrtundan servis veriyor kafka sunucusunun 9000 portuna http ile bağlandığımızda
test topic içerisine mesajlar yazmıştık ona bakalım
Bir yanıt yazın