Apache Kafka, belirli verilerin bir sistemden toplanıp diğer sistemlere kararlı bir şekilde transferini sağlayan dağıtık bir veri akış uygulamasıdır. Özellikle büyük veri sistemlerinde verilerin düzenlileşmesi ve transflerinin yönetilmesi için sıklıkla kullanıldığını görmekteyiz.
Mimari
Bu dökümanda basitçe bir Kafka kurulumu yapacağız. Kafka kurulumunun yanında çeşitli sistemlerle birlikte kullanılan ve dağıtık yapılar için koordinasyon hizmetini sağlayan ZooKeeper'ı da kuracağız.
Bu iki sistem için 2181 portunda yayın yapan ZooKeeper ve 9092 portundan yayın yapan Kafka isimli iki docker imajını ayağa kaldıracağız. Bunlar için docker ve docker-compose kurulu olduğunu varsayarak ilerleyeceğiz.
Docker imajlarını aşağıdaki iki adresten alacak şekilde kullanacağız.
Servislerin ayağa kaldırılması
Docker üzerinde sistemin ayağa kaldırılması için bir klasöre geçip aşağıdaki dosyayı docker-compose.yml olarak kaydetmeniz gerekmektedir.
version: '3'
services:
zookeeper:
image: wurstmeister/zookeeper
container_name: zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka
container_name: kafka
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: localhost
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
Daha sonrasında kaydettiğiniz dosyanın bulunduğu klasörde aşağıdaki komutu kullanabilirsiniz.
docker-compose -f docker-compose.yml up -d
Çıktı olarak aşağıdaki gibi bir çıktı görmeniz gerekmektedir:
Creating network "kafka01_default" with the default driver
Pulling zookeeper (wurstmeister/zookeeper:)...
latest: Pulling from wurstmeister/zookeeper
a3ed95caeb02: Pull complete
...
f0dd38204b6f: Pull complete
Digest: sha256:7a7fd44a72104bfbd24a77844bad5fabc86485b036f988ea927d1780782a6680
Status: Downloaded newer image for wurstmeister/zookeeper:latest
Pulling kafka (wurstmeister/kafka:)...
latest: Pulling from wurstmeister/kafka
42c077c10790: Pull complete
...
539ec416bc55: Pull complete
Digest: sha256:2d4bbf9cc83d9854d36582987da5f939fb9255fb128d18e3cf2c6ad825a32751
Status: Downloaded newer image for wurstmeister/kafka:latest
Creating kafka ... done
Creating zookeeper ... done
Bu adımların sonunda docker ps
komutu ile aşağıdaki gibi ayakta olan iki konteynır görmeniz gerekmektedir.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fee8bfc6cebb wurstmeister/zookeeper "/bin/sh -c '/usr/sb…" 45 minutes ago Up 45 minutes 22/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp zookeeper
f8c2ab063d6c wurstmeister/kafka "start-kafka.sh" 45 minutes ago Up 45 minutes 0.0.0.0:9092->9092/tcp kafka
Kafka üzerinde topic oluşturma
Kafka üzerindeki yapıyı bu dokümanda anlatmayacağım. Bir çok kaynakta bununla ilgili Türkçe ve İngilizce bir çok içerik bulunuyor.
Docker compose ile kafka isminde oluşan docker container'ına giriş için aşağıdaki komutu kullanabilirsiniz:
docker exec -it kafka /bin/sh
Bu adımdan sonra aşağıdaki komut ile kafka'nın "binary" dizinine girip çalıştırılabilecek komutları görebilirsiniz. Tabi ki sürüme göre klasörün ismi de değişeceğini varsayabilirsiniz:
cd /opt/kafka_<sürümbilgisi>/bin
Bu adımdan sonra topic oluşturmak için aşağıdaki komutu uygulamak yeterli olacaktır.
kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic ornek_topic
Bu adımda aşağıdaki gibi ornek_topic'in oluşturulduğu bilgisi alınmalıdır.
Created topic ornek_topic.
Topic'in kontrol edilmesi
Aynı klasörde iken kafka üzerindeki topiclerin listesini öğrenebilirsiniz.
kafka-topics.sh --list --zookeeper zookeeper:2181
Bu adımda çıktı olarak ornek_topic çıktısını görmeniz yeterli olacaktır.