Terapkan kluster Kafka pada Instance ECS yang diaktifkan eRDMA untuk mengurangi latensi antar-node dan overhead CPU, lalu benchmark peningkatan kinerjanya.
-
Kafka adalah platform pemrosesan aliran terdistribusi yang memproses dan menyimpan aliran data, serta mendukung penerbitan dan langganan pesan secara real-time. Kafka banyak digunakan dalam skenario seperti agregasi log, event sourcing, dan analitik real-time. Lihat Kafka documentation.
-
eRDMA adalah layanan Remote Direct Memory Access (RDMA) yang dikembangkan oleh Alibaba Cloud, menawarkan latensi rendah, throughput tinggi, dan elastisitas tinggi. Lihat Overview.
Langkah 1: Siapkan Instance ECS
Siapkan instance ECS untuk Broker, ZooKeeper, dan uji stres sebelum menerapkan kluster Kafka.
-
Instance Broker menyimpan, mengirimkan, dan mengelola pesan sebagai node data inti.
-
Instance ZooKeeper menangani koordinasi terdistribusi untuk kluster Kafka.
-
Instance uji stres melakukan benchmark kinerja kluster Kafka.
Contoh ini menggunakan lima instance ECS: satu ZooKeeper, tiga Broker, dan satu instance uji stres. Tabel berikut mencantumkan persyaratan konfigurasinya.
Tipe instans yang dipilih harus mendukung eRDMA. Lihat Limitations dalam "Configure eRDMA on an enterprise-level instance" untuk daftar tipe instans yang didukung.
|
Purpose |
Instance requirement |
Disk requirement |
Network requirement |
Image requirement |
|
Broker-enabled instance |
Tiga instans. Contoh ini menggunakan ecs.g8a.2xlarge. |
Enterprise SSDs (ESSDs) pada PL3. Pilih kapasitas berdasarkan kebutuhan bisnis Anda. |
|
Alibaba Cloud Linux 3.2104 LTS 64-bit. |
|
Zookeeper-enabled instance |
Satu instans. Contoh ini menggunakan ecs.g8a.xlarge. |
None. |
||
|
Stress testing instance |
Satu instans. Contoh ini menggunakan ecs.g8a.16xlarge. |
None. |
Langkah 2: Instal alat yang diperlukan dan Kafka
Login ke setiap instance ECS dari Langkah 1 dan instal SMC-R, Java, serta Kafka.
eRDMA memerlukan SMC-R, tumpukan protokol di kernel-space yang mengelola resource eRDMA. Lihat Use SMC.
-
Login ke semua instance ECS.
Lihat Menghubungkan ke instans Linux menggunakan kata sandi atau kunci.
-
(Diperlukan kondisional) Jalankan
uname -runtuk memeriksa versi kernel. Pastikan versi kernel adalah5.10.134-16.3atau lebih baru. Jika lebih lama dari5.10.134-16.3, upgrade kernel:sudo yum update kernel sudo reboot -
Instal smc-tools pada setiap instans:
sudo yum install smc-tools -y -
Verifikasi bahwa eRDMA diaktifkan pada setiap instans:
smcr devContoh output:
Net-Dev IB-Dev IB-P IB-State Type Crit #Links PNET-ID eth0 erdma_0 1 ACTIVE 0x107f No 0 -
Nonaktifkan IPv6 pada setiap instans.
CatatanPerangkat eRDMA dan SMC Alibaba Cloud tidak mendukung IPv6. Menonaktifkan IPv6 memastikan trafik mengalir melalui saluran RDMA IPv4.
sudo sysctl net.ipv6.conf.all.disable_ipv6=1 -
Instal Java dan Git:
sudo yum install java-11-openjdk-1:11.0.21.0.9-2.0.3.al8 java-11-openjdk-devel-1:11.0.21.0.9-2.0.3.al8 git -y -
Unduh dan ekstrak paket Kafka:
wget https://archive.apache.org/dist/kafka/3.5.0/kafka_2.13-3.5.0.tgz tar -xf kafka_2.13-3.5.0.tgz
Langkah 3: Jalankan ZooKeeper dan Broker untuk Kafka
-
Login ke semua instance ECS.
-
Tambahkan pemetaan antara alamat IP pribadi dan hostname setiap instans ke file
/etc/hosts.
-
Jalankan ZooKeeper pada instance ZooKeeper:
bash $HOME/kafka_2.13-3.5.0/bin/zookeeper-server-start.sh -daemon $HOME/kafka_2.13-3.5.0/config/zookeeper.properties -
Jalankan Broker pada setiap instance Broker.
CatatanUntuk menguji tanpa eRDMA, hapus parameter
smc_rundari perintah.-
Pada instance Broker pertama, atur ID Broker menjadi
0dan jalankan Broker. Ganti<zookeeper ip>dengan alamat IP pribadi instance ZooKeeper.KAFKA_HEAP_OPTS="-Xmx4G -Xms4G" smc_run bash $HOME/kafka_2.13-3.5.0/bin/kafka-server-start.sh -daemon $HOME/kafka_2.13-3.5.0/config/server.properties --override broker.id=0 --override log.dirs=$HOME/kafka-logs --override zookeeper.connect=<zookeeper ip>:2181 -
Pada instance Broker kedua, atur ID Broker menjadi
1dan jalankan Broker. Ganti<zookeeper ip>dengan alamat IP pribadi instance ZooKeeper.KAFKA_HEAP_OPTS="-Xmx4G -Xms4G" smc_run bash $HOME/kafka_2.13-3.5.0/bin/kafka-server-start.sh -daemon $HOME/kafka_2.13-3.5.0/config/server.properties --override broker.id=1 --override log.dirs=$HOME/kafka-logs --override zookeeper.connect=<zookeeper ip>:2181 -
Pada instance Broker ketiga, atur ID Broker menjadi
2dan jalankan Broker. Ganti<zookeeper ip>dengan alamat IP pribadi instance ZooKeeper.KAFKA_HEAP_OPTS="-Xmx4G -Xms4G" smc_run bash $HOME/kafka_2.13-3.5.0/bin/kafka-server-start.sh -daemon $HOME/kafka_2.13-3.5.0/config/server.properties --override broker.id=2 --override log.dirs=$HOME/kafka-logs --override zookeeper.connect=<zookeeper ip>:2181
-
Langkah 4: Uji kinerja Kafka
Unduh tool Benchmark dan konfigurasikan untuk bandwidth jaringan maksimum. Uji kinerja Kafka dengan dan tanpa eRDMA, lalu bandingkan hasilnya.
-
Login ke instance uji stres, lalu unduh dan kompilasi Open Messaging Benchmark.
-
Unduh dan instal Maven, kompilator untuk Open Messaging Benchmark.
wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz tar -xf apache-maven-3.8.8-bin.tar.gz export PATH=$PATH:$HOME/apache-maven-3.8.8/bin/ -
Konfigurasikan mirror Maven untuk mempercepat pengunduhan.
vi $HOME/apache-maven-3.8.8/conf/settings.xmlTambahkan konten berikut ke tag
settings.xml mirrors, lalu simpan dan tutup file.<mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> -
Unduh dan kompilasi Open Messaging Benchmark:
git clone https://github.com/openmessaging/benchmark.git cd benchmark && mvn clean verify -DskipTests
-
-
Konfigurasikan alamat IP Broker dalam file kafka-throughput.yaml.
vi $HOME/benchmark/driver-kafka/kafka-throughput.yamlAtur
bootstrap.serverske alamat IP pribadi instance Broker:<Private IP address of Broker 0>:9092,<Private IP address of Broker 1>:9092,<Private IP address of Broker 2>:9092.commonConfig: | bootstrap.servers=<172.17.XX.XX>:9092,<172.17.XX.XX>:9092,<172.17.XX.XX>:9092 default.api.timeout.ms=1200000 request.timeout.ms=1200000 -
Atur laju pengiriman pesan agar memenuhi bandwidth jaringan yang tersedia.
vi $HOME/benchmark/workloads/1-topic-100-partitions-1kb-4p-4c-200k.yamlUbah
producerRate: <Message sending rate>. Laju tersebut dihitung sebagai:Available bandwidth of a Broker-enabled instance / Size of a single message.Dalam contoh ini, setiap Broker menggunakan ecs.g8a.2xlarge (maks 4 Gbit/s). Total bandwidth tiga Broker adalah 12 Gbit/s. Karena mekanisme triplicate Kafka,
available bandwidth of a Broker-enabled instanceadalah 12/3 = 4 Gbit/s (512 MB/s). Dengan ukuran pesan 1 KB dalam direktoriworkloads,message sending rateadalah 512 MB/s / 1 KB = 524.288. AturproducerRate: <Message sending rate>menjadiproducerRate: 524288. Sesuaikan laju tersebut berdasarkan kebutuhan aktual Anda. -
Uji kinerja kluster Kafka menggunakan salah satu metode berikut.
Lakukan uji kinerja saat eRDMA diaktifkan
smc_run $HOME/benchmark/bin/benchmark --drivers $HOME/benchmark/driver-kafka/kafka-throughput.yaml $HOME/benchmark/workloads/1-topic-100-partitions-1kb-4p-4c-2000k.yamlSelama pengujian, Anda juga dapat:
-
Jalankan
smcss -adi jendela lain pada instance uji stres untuk memverifikasi SMC-R sedang mengirimkan pesan. -
Jalankan
sarpada setiap instance Broker untuk memeriksa utilisasi CPU. Misalnya,sar 1 20mengambil sampel sekali per detik selama 20 kali. Jumlahkan utilisasi CPU ketiga instance Broker untuk total keseluruhan.
Lakukan uji kinerja saat eRDMA dinonaktifkan
$HOME/benchmark/bin/benchmark --drivers $HOME/benchmark/driver-kafka/kafka-throughput.yaml $HOME/benchmark/workloads/1-topic-100-partitions-1kb-4p-4c-2000k.yamlPentingUntuk mencegah data uji sisa memengaruhi pengujian non-eRDMA, hapus catatan Broker dan ZooKeeper lalu mulai ulang kedua layanan tersebut.
-
-
Bandingkan hasil latensi dari kedua pengujian untuk mengevaluasi dampak kinerja eRDMA.
Cari entri terakhir
Aggregated Pub Latency (ms).avgadalah latensi rata-rata, 99% adalah latensi P99, dan 999% adalah latensi P999.