Apache Kafka Seriyası — Apache Kafka-nın ənənəvi üsulla və Docker-də qurulması
Artıq Kafka seriyamızın nəzəri mövzularına digər məqalələrdə nəzər salmışıq. Həmin məqalələri oxumamısınızsa, aşağıdan keçid ala bilərsiniz:
Bu məqalədə isə artıq Kafka-nın həm ənənəvi üsulla həm də Docker-də qurulub çalışdırılmasına eyni zamanda keçən məqalədə qeyd etdiyimiz sazlamaları haradan edə biləcəyimizə baxacağıq.
Qeyd: Bu məqalədə Kafka-nın qurulma üsulları öz lokal mühitimizdə bu texnologiyanı öyrənmək və ya development apararkən istifadə etməyimiz üçündür. Əgər siz real proyektlərinizdə Kafka-dan istifadə edəcəksinizsə, öz infrastrukturunuza uyğun quraşdırma işləri aparmanızı tövsiyyə edirəm.
Başlayaq ənənəvi üsuldan — yəni Unix əsaslı və Windows əməliyyat sistemlərində qurulmasından. İlk öncə Kafka-nın son versiyasını rəsmi ünvanından aşağıdakı linkə daxil olaraq yükləyək.
https://downloads.apache.org/kafka/
Qeyd: Kafka JVM əsaslı Java və Scala dillərində yazıldığı üçün sistemdə Java yükülü olmalıdır. Sisteminizdə Java-nın yükülü olub olmamasını terminaldan java -version yazaraq yoxlaya bilərsiniz.
Yüklədiyimiz arxiv faylını əməliyyat sistemində uyğun qovluğa çıxarış edirik. Həmin qovluğa daxil olaq və əsas alt qovluqlara nəzər salaq:
- bin — Əməliyyatlar icra etməyimiz üçün lazım olar skriptlər
- config — Sazlama faylları
- lib — Kafka-nın çalıması üçün lazım olan JAR-lar
- log — Logların saxlanıldığı qovluq
Bizə məlumdur ki, Kafka-nın istifadə edilməsi üçün ZooKeeper-ə də ehtiyyac vardır. ZooKeeper-i ayrıca da yükləmək mümkündür lakin biz hazırda Kafka-nın içində olanı istifadə edəcik. ZooKeeper-i başlatmaq üçün əməliyyat sisteminə uyğun skripti çalışdırmalı və ZooKeeper-in sazlamalarının saxlanıldığı zookeeper.properties faylını parameter kimi verməliyik:
Linux və ya MAC:
bin/zookeeper-server-start.sh config/zookeeper.properties
Windows:
bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties
Əmr uğurla icra edildisə ZooKeeper çalımağa başlayacaq. Buna log-lardan əmin ola bilərik:
Göründüyü kimi artıq ZooKeeper 2181 portunda çalışır. Bu portu istəyə bağlı olaraq zookeeper.properties faylından dəyişə bilərik.
İndi isə Kafka-nı çalışdıraq. Bunun üçün uyğun skripti və Kafka serverinin yəni Broker-in sazlamalarının yerləşdiyi server.properties faylını parameter kimi veririk.
Linux və ya MAC:
bin/kafka-server-start.sh config/server.properties
Windows:
bin\windows\kafka-server-start.bat .\config\server.properties
Kafka serverimiz 9092 portunda uğurla çalışmağa başladı.
Keçən məqalədə qeyd etdiyimiz broker-lə bağlı sazlamaları məhz server.properties -də edirik:
- broker.id — Broker-in id-sini qeyd etməyimiz üçündür. Susmaya görə 0-dır.
- num.partitions — Topic yaradılarkən neçə partition olmasını təyin edir. Susmaya görə 1 dir.
- log.retention.hours — Verilənlərin nə qədər müddət saxlanılacağını saatla təyin edir. Qeyd etdiyimiz kimi bu susmaya görə 1 həftədir yəni 168 saat.
- log.segment.bytes — Əgər verilənlərin saxlanılmasını vaxta görə yox yaddaşa görə baytlarla təyin etmək istəsək o zaman bu sazlamanı istifadə edirik. Susmaya görə komment-dədir (bağlıdır) və 1073741824 bayt yəni 1 GB-dır.
Artıq Kafka uğurla çalışdığına görə nümunə bir topic yaradaq:
Linux və ya MAC:
bin/kafka-topics.sh — create — bootstrap-server localhost:9092 — topic kafka-bloq-seriyasi
Windows:
bin\windows\kafka-topics.bat — create — bootstrap-server localhost:9092 — topic kafka-bloq-seriyasi
Və cavab olaraq aşağıdakı mesajı alacıq:
Created topic kafka-bloq-seriyasi.
Topic-lərin siyahısına aşağıdakı əmrlə baxa bilərik:
Linux və ya MAC:
bin/kafka-topics.sh — list — bootstrap-server localhost:9092
Windows:
bin\windows\kafka-topics.bat — list — bootstrap-server localhost:9092
İndi isə yaratdığmız topic-ə terminaldan mesaj göndərək və digər terminaldan oxuyaq. Bunun üçün Kafka bizə terminal producer və consumer verir. İlk öncə producer terminalımızı açaq:
Linux və ya MAC:
bin/kafka-console-producer.sh — bootstrap-server localhost:9092 — topic kafka-bloq-seriyasi
Windows:
bin\windows\kafka-console-producer.bat — bootstrap-server localhost:9092 — topic kafka-bloq-seriyasi
Artıq mesajlarımızı göndərə bilərik. Hər sətr yeni mesaj qəbul olunur:
Mesajlarımızı consumer-lə oxumaq üçün digər terminaldan aşağıdakı əmr-i icra edirik:
Linux və ya MAC:
bin/kafka-console-consumer.sh — bootstrap-server localhost:9092 — topic kafka-bloq-seriyasi — from-beginning
Windows:
bin\windows\kafka-console-consumer.bat — bootstrap-server localhost:9092 — topic kafka-bloq-seriyasi — from-beginning
Kafka-nın ənənəvi üsulla qurulmasına və çalışdırılmasına baxdıq. İndi isə keçək Docker-də qurulmasına. Docker-də Kafka və ZooKeeper -in container-lərini yaratmaq üçün bir neçə alternativ repository-lər var. Lakin mən Confluent-in image-lərindən istifadə edib ikisini birlikdə docker-compose ilə 1 stack yaradaraq istifadə etməyi göstərəcəm.
docker-compose.yml faylı:
version: '3.3'services: zookeeper: image: confluentinc/cp-zookeeper container_name: zookeeper environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 kafka: image: confluentinc/cp-kafka container_name: kafka depends_on: - zookeeper ports: - 9092:9092 environment: KAFKA_BROKER_ID: 0 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.0.110:9092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
Stack-i yaratmaq üçün docker-compose.yml qovluğa daxil olub aşağıdakı əmri icra edirik:
docker-compose up -d –build
Və artıq -- bootstrap-server parametrinə docker-compose.yml faylında qeyd etdiyimiz ip adresini yazaraq Docker-dəki Kafka-nı istifadə edə bilərik. Mən öz “home server” -imin ip-si olan 192.168.0.110 -u qeyd etdim siz öz istədiyiniz ip-ni verə bilərsiniz.
Kafka seriyasının 4-cü məqaləsinin sonuna gəldik. Bu məqalədə Kafka-nın necə local mühitimizdə ənənəvi üsulla və Docker-də qurulub istifadə olunmasına nəzər saldıq. Seriyanın növbəti məqaləsində nümunə proyekt üzərindən Kafka-nın Core Java və Spring Boot- ilə tətbiq edilməsinə baxacağıq. İzləmədə qalın, uğurlar!