Kluster Kafka dapat diterapkan pada instance Elastic Compute Service (ECS) di mana Elastic Remote Direct Memory Access (eRDMA) diaktifkan. Kluster Kafka dapat sepenuhnya memanfaatkan latensi rendah, throughput tinggi, dan pemanfaatan CPU rendah yang disediakan oleh eRDMA untuk meningkatkan efisiensi transmisi data antar node dalam kluster Kafka. Kluster Kafka cocok untuk skenario yang memerlukan throughput pesan tinggi dan latensi rendah. Topik ini menjelaskan cara menerapkan Kafka kluster pada instance ECS yang mendukung eRDMA. Topik ini juga menjelaskan cara menguji performa Kafka yang ditingkatkan oleh eRDMA.
Kafka adalah platform pemrosesan aliran terdistribusi yang secara efisien memproses dan menyimpan sejumlah besar aliran data serta mendukung publikasi dan langganan pesan waktu nyata. Kafka banyak digunakan dalam skenario seperti agregasi log, sumber peristiwa, dan analitik waktu nyata. Untuk informasi lebih lanjut, lihat Dokumentasi Kafka.
eRDMA adalah layanan Remote Direct Memory Access (RDMA) yang dikembangkan oleh Alibaba Cloud untuk memastikan performa jaringan tinggi dengan latensi rendah, throughput tinggi, dan elastisitas tinggi. Untuk informasi lebih lanjut, lihat Ikhtisar.
Langkah 1: Persiapkan instance ECS
Sebelum menerapkan kluster Kafka, siapkan beberapa instance ECS untuk layanan Broker dan ZooKeeper serta lingkungan pengujian stres.
Instance dengan layanan Broker berfungsi sebagai node data inti dalam kluster untuk menyimpan, mentransmisikan, dan mengelola pesan.
Instance dengan layanan ZooKeeper mengimplementasikan koordinasi dan manajemen layanan terdistribusi dalam kluster Kafka.
Instance pengujian stres digunakan untuk menguji performa kluster Kafka yang telah diterapkan.
Dalam contoh ini, lima instance ECS dibuat: satu instance untuk ZooKeeper, tiga instance untuk Broker, dan satu instance untuk pengujian stres. Tabel berikut menjelaskan persyaratan konfigurasi instance.
Tipe instance yang dipilih harus mendukung eRDMA. Untuk informasi tentang tipe instance yang mendukung eRDMA, lihat bagian Batasan dalam topik "Konfigurasikan eRDMA pada Instance Level Perusahaan".
Tujuan | Persyaratan instance | Persyaratan disk | Persyaratan jaringan | Persyaratan gambar |
Instance yang diaktifkan Broker | Buat tiga instance. Dalam contoh ini, tipe instance ecs.g8a.2xlarge digunakan. | Pilih Enterprise SSD (ESSD) pada level performa 3 (PL3). Pilih kapasitas disk berdasarkan kebutuhan bisnis Anda. |
| Alibaba Cloud Linux 3.2104 LTS 64-bit. |
Instance yang diaktifkan Zookeeper | Buat satu instance. Dalam contoh ini, tipe instance ecs.g8a.xlarge digunakan. | Tidak ada. | ||
Instance pengujian stres | Buat satu instance. Dalam contoh ini, tipe instance ecs.g8a.16xlarge digunakan. | Tidak ada. |
Langkah 2: Instal alat yang diperlukan dan Kafka
Masuk ke masing-masing dari lima instance ECS yang disiapkan di Langkah 1 dan jalankan perintah terkait untuk menginstal Shared Memory Communications over Remote Direct Memory Access (SMC-R), alat Java, dan Kafka.
Sebelum menggunakan fitur eRDMA, Anda harus menerapkan SMC-R. SMC-R bekerja di ruang kernel, dan tumpukan protokol SMC-R membantu instance menggunakan, mengelola, dan memelihara sumber daya eRDMA. Untuk informasi tentang SMC-R, lihat Gunakan SMC.
Masuk ke semua instance ECS secara berurutan.
Untuk informasi lebih lanjut, lihat Hubungkan ke Instance Linux Menggunakan Kata Sandi atau Kunci.
(Kondisional wajib) Jalankan perintah
uname -runtuk melihat versi kernel. Pastikan bahwa versi kernel semua instance adalah5.10.134-16.3atau lebih baru. Jika versi kernel suatu instance lebih lama dari5.10.134-16.3, jalankan perintah berikut untuk meningkatkan kernel ke versi terbaru:sudo yum update kernel sudo rebootJalankan perintah berikut untuk menginstal toolkit smc-tools pada setiap instance:
sudo yum install smc-tools -yJalankan perintah berikut untuk memeriksa apakah eRDMA diaktifkan pada setiap instance:
smcr devContoh keluaran:
Net-Dev IB-Dev IB-P IB-State Type Crit #Links PNET-ID eth0 erdma_0 1 ACTIVE 0x107f No 0Jalankan perintah berikut untuk menonaktifkan IPv6 pada setiap instance.
CatatanPerangkat eRDMA dan SMC milik Alibaba Cloud tidak mendukung alamat IPv6. Setelah menonaktifkan IPv6, lalu lintas dapat melewati saluran RDMA menggunakan IPv4.
sudo sysctl net.ipv6.conf.all.disable_ipv6=1Jalankan perintah berikut untuk menginstal 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 -yJalankan perintah berikut untuk mengunduh dan mengekstrak 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: Mulai ZooKeeper dan Broker untuk Kafka
Masuk ke semua instance ECS secara berurutan.
Tambahkan pemetaan antara alamat IP privat dan nama host suatu instance ke file
/etc/hostspada setiap instance.
Jalankan perintah berikut pada instance yang diaktifkan ZooKeeper untuk memulai ZooKeeper:
bash $HOME/kafka_2.13-3.5.0/bin/zookeeper-server-start.sh -daemon $HOME/kafka_2.13-3.5.0/config/zookeeper.propertiesMulai Broker pada masing-masing dari tiga instance yang diaktifkan Broker.
CatatanJika Anda melakukan pengujian tanpa menggunakan fitur eRDMA, hapus parameter
smc_rundari perintah.Pada instance pertama yang diaktifkan Broker, atur ID Broker ke
0dan mulai Broker. Ganti<zookeeper ip>dengan alamat IP privat instance yang diaktifkan 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>:2181Pada instance kedua yang diaktifkan Broker, atur ID Broker ke
1dan mulai Broker. Ganti<zookeeper ip>dengan alamat IP privat instance yang diaktifkan 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>:2181Pada instance ketiga yang diaktifkan Broker, atur ID Broker ke
2dan mulai Broker. Ganti<zookeeper ip>dengan alamat IP privat instance yang diaktifkan 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: Lakukan pengujian performa
Unduh alat Benchmark dan simulasi lingkungan di mana bandwidth jaringan tertinggi tersedia dikonfigurasi. Uji performa Kafka saat eRDMA diaktifkan dan saat eRDMA dinonaktifkan. Bandingkan hasil pengujian untuk mengevaluasi peningkatan performa yang disumbangkan oleh eRDMA ke kluster Kafka.
Masuk ke instance pengujian stres. Unduh dan kompilasi Open Messaging Benchmark.
Unduh dan instal Maven yang merupakan kompiler 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/Ubah file konfigurasi repositori Maven untuk mempercepat unduhan.
vi $HOME/apache-maven-3.8.8/conf/settings.xmlTambahkan konten berikut ke tag
settings.xml mirrors. Lalu simpan dan tutup file konfigurasi.<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 kode sumber Open Messaging Benchmark.
git clone https://github.com/openmessaging/benchmark.git cd benchmark && mvn clean verify -DskipTests
Tentukan alamat IP privat instance yang diaktifkan Broker dalam file kafka-throughput.yaml.
vi $HOME/benchmark/driver-kafka/kafka-throughput.yamlDalam file kafka-throughput.yaml, atur parameter
bootstrap.serverske alamat IP privat instance yang diaktifkan Broker dalam format berikut:<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=1200000Tentukan laju pengiriman pesan Kafka untuk mensimulasikan bandwidth jaringan tertinggi yang tersedia untuk lingkungan di mana performa kluster Kafka diuji.
vi $HOME/benchmark/workloads/1-topic-100-partitions-1kb-4p-4c-200k.yamlUbah parameter
producerRate: <Message sending rate>dalam file. Laju pengiriman pesan dihitung menggunakan rumus berikut:Bandwidth tersedia instance yang diaktifkan Broker/Ukuran pesan tunggal.Dalam contoh ini, tipe instance dari instance yang diaktifkan Broker adalah ecs.g8a.2xlarge. Bandwidth jaringan maksimum dari tipe instance ini adalah 4 Gbit/s, dan total bandwidth dari tiga instance yang diaktifkan Broker adalah 12 Gbit/s. Karena mekanisme triplicate Kafka, bandwidth aktual yang tersedia adalah sekitar sepertiga dari total bandwidth. Oleh karena itu,
bandwidth tersedia instance yang diaktifkan Brokerdihitung sebagai 12 Gbit/s dibagi 3, yang sama dengan 4 Gbit/s (atau 512 MB/s). Mengingat pengujian dilakukan dalam direktoriworkloads, di mana ukuran setiap pesan adalah 1 KB.Laju pengiriman pesandihitung sebagai 512 MB/s dibagi 1 KB, yang sama dengan 524.288. Dalam hal ini, ubah parameterproducerRate: <Message sending rate>menjadiproducerRate: 524288dalam file. Dalam pengujian aktual, atur laju pengiriman pesan berdasarkan kebutuhan bisnis Anda.Gunakan salah satu metode berikut untuk menguji performa kluster Kafka.
Lakukan pengujian performa 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 performa Kafka, Anda dapat melakukan operasi berikut secara bersamaan:
Jalankan perintah
smcss -adi jendela lain pada instance pengujian stres untuk memeriksa apakah SMC-R digunakan untuk mentransmisikan pesan.Jalankan perintah
sarpada masing-masing dari tiga instance yang diaktifkan Broker untuk memeriksa pemanfaatan CPU. Misalnya, perintahsar 1 20menunjukkan bahwa data diambil sekali setiap 1 detik selama 20 kali. Kemudian nilai pemanfaatan CPU dari tiga instance yang diaktifkanBroker dijumlahkan untuk mendapatkan total pemanfaatan CPU.
Lakukan pengujian performa 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 pengujian yang tersisa memengaruhi pengujian performa saat eRDMA dinonaktifkan, hapus catatan Broker dan ZooKeeper serta mulai ulang Broker dan Zookeeper pada instance.
Dapatkan informasi latensi dari hasil dua pengujian untuk mengevaluasi peningkatan performa yang disumbangkan oleh eRDMA ke kluster Kafka.
Temukan dan lihat entri
Aggregated Pub Latency (ms)terakhir.avgmewakili latensi rata-rata, 99% mewakili latensi P99, dan 999% mewakili latensi P999.