Konfigurasi cluster ZooKeeper tiga simpul dan pialang Apache Kafka

Selamat siang!

Dalam artikel ini, kita akan melihat pengaturan sekelompok tiga simpul ZooKeeper (layanan koordinasi sistem terdistribusi), dua di antaranya adalah broker pesan Kafka , dan yang ketiga adalah manajer.

Akibatnya, skema komponen berikut akan diterapkan:

gambar

Semua komponen pada satu mesin, untuk kesederhanaan, kami akan menggunakan pesan penerbit (produsen) dan pelanggan (konsumen) bawaan.

Modul ZooKeeper dibangun ke dalam paket Kafka, kami menggunakannya.

Instalasi dan pengaturan


Menginstal Paket Kafka

Dalam hal ini, sistem operasinya adalah Ubuntu 16.04 LTS.

Versi saat ini dan instruksi terperinci ada di situs web resmi .

wget http://mirror.linux-ia64.org/apache/kafka/2.4.1/kafka_2.12-2.4.1.tgz
tar -xvzf kafka_2.12-2.4.1.tgz 

Buat direktori yang berfungsi untuk tiga node server_1, server_2 dan server_3.

mv kafka_2.12-2.4.1 kafka_server_1
cp -r kafka_server_1/ kafka_server_2/
cp -r kafka_server_1/ kafka_server_3/

Mengkonfigurasi simpul

Mengkonfigurasi broker Kafka
(dari direktori kafka_server_1, kafka_server_2, dan kafka_server_3, masing-masing)

vim config/server.properties

  • id pialang (masing-masing 0, 1, 2)
  • port klien (9092, 9093, 9094)
  • Port ZooKeeper (2181, 2182, 2183)
  • direktori log (/ tmp / kafka-logs-1, / tmp / kafka-logs 2, / tmp / kafka-logs 3)

broker.id=0
listeners=PLAINTEXT://:9092
zookeeper.connect=localhost:2181   
log.dirs=/tmp/kafka-logs-1

Konfigurasi Znode:

vim config/zookeeper.properties

  • direktori untuk data (/ tmp / zookeeper_1, / tmp / zookeeper_2, / tmp / zookeeper_3)
  • port klien (2181, 2182, 2183)
  • jumlah maksimum koneksi klien dan batas koneksi
  • port untuk pertukaran data antar node (mis., kami menginformasikan setiap node tentang keberadaan orang lain)

dataDir=/tmp/zookeeper_1
clientPort=2181
maxClientCnxns=60
initLimit=10
syncLimit=5
tickTime=2000
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

Membuat direktori untuk node ZooKeeper, menulis id node ke file layanan:

mkdir -p /tmp/zookeeper_[1..3]
echo "1" >> /tmp/zookeeper_1/myid
echo "2" >> /tmp/zookeeper_2/myid
echo "3" >> /tmp/zookeeper_3/myid

Jika ada masalah dengan hak akses, ubah dalam direktori dan file:

sudo chmod 777 /tmp/zookeeper_1

Menjalankan z-node dan broker


Untuk dua node pertama (kafka_server_1 /, kafka_server_2 /), jalankan skrip ZooKeeper dan server Kafka, argumennya adalah file konfigurasi yang sesuai:

sudo bin/zookeeper-server-start.sh config/zookeeper.properties
sudo bin/kafka-server-start.sh config/server.properties

Untuk simpul ketiga (kafka_server_3 /) - hanya ZooKeeper.

Skrip untuk menghentikan server:

sudo bin/kafka-server-stop.sh
sudo bin/zookeeper-server-stop.sh

Membuat tema, produsen dan konsumen konsol


Topik (topik) - aliran pesan dari jenis tertentu, dibagi menjadi beberapa partisi (jumlahnya ditentukan oleh kunci - partisi). Setiap partisi digandakan pada dua server (- faktor-replikasi). Setelah kunci --bootstrap-server, tentukan port broker Kafka, dipisahkan dengan koma. Switch --topic menentukan nama topik.

sudo bin/kafka-topics.sh --create --bootstrap-server localhost:9092,localhost:9093 --replication-factor 2 --partitions 2 --topic TestTopic

Untuk mengetahui daftar topik pada port, informasi tentang setiap topik dapat dilakukan dengan perintah:

sudo bin/kafka-topics.sh --list --zookeeper localhost:2181           
sudo bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic TestTopic

Pemimpin - server dengan instance utama dari partisi, replika - server tempat informasi digandakan, ISR - server yang berperan sebagai pemimpin jika terjadi kegagalan pemimpin.

Kami membuat produsen konsol, konsumen konsol menggunakan skrip yang sesuai:

sudo bin/kafka-console-producer.sh --broker-list localhost:9092,localhost:9093 --topic TestTopic
sudo bin/kafka-console-consumer.sh --bootstrap-server localhost:9092,localhost:9093 --from-beginning --topic TestTopic

Ini memastikan pengiriman pesan yang berkelanjutan kepada penerima, jika salah satu broker pesan memproses pesan kedua.

Layanan untuk penjaga kebun binatang dan kafka di systemctl


Untuk kenyamanan memulai sebuah cluster, Anda dapat membuat layanan di systemctl: zookeeper_1.service, zookeeper_2.service, zookeeper_3.service, kafka_1.service, kafka_2.service.

Kami mengedit file /etc/systemd/system/zookeeper_1.service (ubah direktori / home / pengguna dan pengguna pengguna menjadi yang diperlukan).

[Unit]
Requires=network.target remote-fs.target
After=network.target remote-fs.target

[Service]
Type=simple
User=user
ExecStart=home/user/kafka_server_1/bin/zookeeper-server-start.sh /home/user/kafka_server_1/config/zookeeper.properties
ExecStop=/home/user/kafka_server_1/bin/zookeeper-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multi-user.target

Untuk layanan zookeeper_2.service dan zookeeper_3.service mirip.

File /etc/systemd/system/kafka_1.service:
[Unit]
Requires=zookeeper.service
After=zookeeper.service

[Service]
Type=simple
User=user
ExecStart=/bin/sh -c '/home/user/kafka_server_1/bin/kafka-server-start.sh /home/user/kafka_server_1/config/server.properties > /tmp/kafka-logs-1 2>&1'
ExecStop=/home/user/kafka_server_1/bin/kafka-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multi-user.target

kafka_2.service serupa.

Aktivasi dan verifikasi layanan

systemctl daemon-reload
systemctl enable zookeeper_1.service #  
systemctl start zookeeper_1.service
sudo journalctl -u zookeeper_1.service #   
systemctl stop zookeeper_1.service

Hal yang sama berlaku untuk zookeeper_2.service, zookeeper_3.service, kafka_1.service, kafka_1.service.

Terimakasih atas perhatiannya!

All Articles