Apache Kafka Kurulumu: Adım Adım Kafka Install Rehberi

YUNUS EMRE ATAY

apache_kafka

Apache Kafka, yüksek hacimli gerçek zamanlı veri akışlarını işlemek için kullanılan dağıtık bir mesajlaşma sistemidir. Büyük veri, mikroservis mimarisi, log yönetimi ve gerçek zamanlı analiz gibi alanlarda yaygın şekilde tercih edilir. Bu rehberde, Linux tabanlı bir sistem üzerinde Apache Kafka kurulumunu tüm detaylarıyla anlatıyorum.


Neden Apache Kafka?

MKafka, yüksek performansı, yatayda ölçeklenebilir yapısı ve dayanıklılığı sayesinde modern veri mimarilerinin temel bileşenlerinden biridir. Özellikle aşağıdaki ihtiyaçlar için idealdir:

  • Streaming uygulamaları
  • Gerçek zamanlı veri işleme
  • Event-driven mimariler
  • Mikroservisler arası iletişim
  • Log toplama

Kafka Kurulumu – Gereksinimler

Kurulum adımlarına geçmeden önce sistem gereksinimlerine göz atalım.

Minimum Sistem Gereksinimleri

  • 2 GB RAM (Geliştirme ortamı için)
  • 10 GB boş disk alanı
  • Linux, macOS veya Windows işletim sistemi

Gerekli Bağımlılıklar

Kafka, Zookeeper’a ihtiyaç duyuyordu ancak Kafka 2.8+ sürümleri ile birlikte KRaft (Kafka Raft) modunu destekler hale geldi. Bu rehberde en güncel yöntem olan KRaft modunda Kafka kurulumu anlatılmaktadır.


✔ Java

Kafka’nın çalışması için bir Java Runtime Environment gereklidir.

Java sürümünü kontrol edin:

java -version
openjdk version "11.0.25" 2024-10-15 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.25.0.9-1.0.1.el7_9) (build 11.0.25+9-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.25.0.9-1.0.1.el7_9) (build 11.0.25+9-LTS, mixed mode, sharing)

Java yoksa OpenJDK kurarak devam edebilirsiniz:

rpm -ivh jdk-11.0.29_linux-x64_bin.rpm

Apache Kafka

Kafka paketini indirmek ve kurmak istediğiniz dizine indirin, taşıyın ve çıkarın:

İndirilen Kafka paketini çıkarın:

tar -xvzf kafka_2.13-3.9.1.tgz
mv kafka_2.13-3.9.1 /opt/kafka

Kafka Dizini ve İzinler

Servisi root olarak çalıştırabilirsin (User=root) ama genellikle Kafka için ayrı bir kullanıcı oluşturmak daha güvenli:

sudo useradd -r -m -s /bin/false kafka
sudo chown -R kafka:kafka /opt/kafka

KRaft Konfigürasyonunu Hazırla

Quickstart’da Kafka normalde Zookeeper kullanır, fakat güncel Kafka sürümleri KRaft modu ile Zookeeper olmadan çalışabilir. Biz KRaft mod kullanıyoruz çünkü daha yeni, daha basit ve tavsiye edilir.

Konfigürasyon dosyasını oluştur:

sudo mkdir -p /opt/kafka/config/kraft
sudo tee /opt/kafka/config/kraft/server.properties > /dev/null <<'EOF'
process.roles=broker,controller
node.id=1
controller.quorum.voters=1@10.10.10.23:19093

listeners=PLAINTEXT://10.10.10.23:9092,CONTROLLER://10.10.10.23:19093
advertised.listeners=PLAINTEXT://10.10.10.23:9092

controller.listener.names=CONTROLLER
inter.broker.listener.name=PLAINTEXT

log.dirs=/opt/kafka/data
num.partitions=1
auto.create.topics.enable=true
EOF

sudo chown kafka:kafka /opt/kafka/config/kraft/server.properties

Log ve Data Dizini Oluşturma

Kafka’nın veri ve log dosyalarını saklayacağı dizinleri ayarlayalım:

mkdir -p /var/lib/kafka/data
mkdir -p /var/log/kafka
chown -R kafka:kafka /var/lib/kafka /var/log/kafka


KRaft Modu için UUID Oluşturma ve Formatlama

UUID oluştur:

sudo -u kafka /opt/kafka/bin/kafka-storage.sh random-uuid
5Ra-ItRiRie0PR6TBBLPwg

Çıkan UUID ile veri dizinini formatla:

sudo -u kafka /opt/kafka/bin/kafka-storage.sh format \
    --config /opt/kafka/config/kraft/server.properties \
    --cluster-id 5Ra-ItRiRie0PR6TBBLPwg

Kafka 3.9.1’i Systemd Servisi Olarak Çalıştırma

Servis dosyasını /etc/systemd/system/ dizinine ekleyelim:

touch /etc/systemd/system/kafka.service

Sistemdeki tüm Java yollarını listeleyin ve seçim yapın:

alternatives --config java

There are 4 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
   1           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-1.el7.x86_64/jre/bin/java)
*  2           /usr/lib/jvm/jdk-25.0.1-oracle-x64/bin/java
   3           /usr/lib/jvm/jdk-17.0.12-oracle-x64/bin/java
 + 4           java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.25.0.9-1.0.1.el7_9.x86_64/bin/java)

Enter to keep the current selection[+], or type selection number: 4

İçerik olarak aşağıyı ekleyin (Kafka dizinini sisteminizdeki kurulum yoluna göre güncelleyin):

sudo tee /etc/systemd/system/kafka.service > /dev/null <<'EOF'
[Unit]
Description=Apache Kafka (KRaft) - 3.9.1
After=network.target

[Service]
User=kafka
Group=kafka
Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk"
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/kraft/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-failure
RestartSec=10
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

Notlar:

  • ExecStart: Kafka başlatma komutu
  • ExecStop: Kafka’yı düzgün şekilde durdurmak için komut
  • Restart=on-failure: Servis hata alırsa yeniden başlatılır
  • RestartSec=10: Yeniden başlatmadan önce 10 saniye bekler

Servisi Etkinleştirme ve Başlatma:

sudo systemctl daemon-reload
sudo systemctl enable kafka
sudo systemctl start kafka
sudo systemctl status kafka


Kafka Topic Oluşturma ve Test Mesajları

Topic Oluşturma:

sudo -u kafka /opt/kafka/bin/kafka-topics.sh --create \
  --topic test-topic \
  --partitions 1 \
  --replication-factor 1 \
  --bootstrap-server localhost:9092

Producer ile Mesaj Gönderme:

sudo -u kafka /opt/kafka/bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092
>Merhaba Kafka!
>İlk test mesajım
>Bugün veri akışı denemesi

Consumer ile Mesaj Okuma:

sudo -u kafka /opt/kafka/bin/kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server localhost:9092
Merhaba Kafka!
İlk test mesajım
Bugün veri akışı denemes

Leave a Reply to %s

Your email address will not be published. Required fields are marked with *

Hey!

Hello! I'm EMRE, and I'm passionate about technology, software, databases, and data analytics. In this blog, I aim to provide helpful content by sharing my learnings and experiences. In my spare time, I enjoy exploring new technologies, writing, and self-improvement.

My contact addresses