All Products
Search
Document Center

Elastic Compute Service:Menerapkan Kluster Kafka Berperforma Jaringan Tinggi pada Instance yang Mendukung eRDMA

Last Updated:Jul 06, 2025

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.

Catatan
  • 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.

Penting

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.

  • Anda harus mengonfigurasi alamat IP publik untuk instance.

  • Anda harus menerapkan instance dalam virtual private cloud (VPC) yang sama. Secara default, instance dapat berkomunikasi satu sama lain dalam jaringan internal.

  • Anda harus mengaktifkan fitur eRDMA untuk instance. Untuk informasi lebih lanjut, lihat Konfigurasikan eRDMA pada instance level perusahaan.

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.

Catatan

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.

  1. Masuk ke semua instance ECS secara berurutan.

    Untuk informasi lebih lanjut, lihat Hubungkan ke Instance Linux Menggunakan Kata Sandi atau Kunci.

  2. (Kondisional wajib) Jalankan perintah uname -r untuk melihat versi kernel. Pastikan bahwa versi kernel semua instance adalah 5.10.134-16.3 atau lebih baru. Jika versi kernel suatu instance lebih lama dari 5.10.134-16.3, jalankan perintah berikut untuk meningkatkan kernel ke versi terbaru:

    sudo yum update kernel
    sudo reboot
  3. Jalankan perintah berikut untuk menginstal toolkit smc-tools pada setiap instance:

    sudo yum install smc-tools -y
  4. Jalankan perintah berikut untuk memeriksa apakah eRDMA diaktifkan pada setiap instance:

    smcr dev

    Contoh keluaran:

    Net-Dev IB-Dev IB-P IB-State Type Crit #Links PNET-ID 
    eth0 erdma_0 1 ACTIVE 0x107f No 0 
  5. Jalankan perintah berikut untuk menonaktifkan IPv6 pada setiap instance.

    Catatan

    Perangkat 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=1
  6. Jalankan 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 -y
  7. Jalankan 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

  1. Masuk ke semua instance ECS secara berurutan.

  2. Tambahkan pemetaan antara alamat IP privat dan nama host suatu instance ke file /etc/hosts pada setiap instance.

    image

  3. 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.properties
  4. Mulai Broker pada masing-masing dari tiga instance yang diaktifkan Broker.

    Catatan

    Jika Anda melakukan pengujian tanpa menggunakan fitur eRDMA, hapus parameter smc_run dari perintah.

    • Pada instance pertama yang diaktifkan Broker, atur ID Broker ke 0 dan 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>:2181
    • Pada instance kedua yang diaktifkan Broker, atur ID Broker ke 1 dan 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>:2181
    • Pada instance ketiga yang diaktifkan Broker, atur ID Broker ke 2 dan 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.

  1. Masuk ke instance pengujian stres. Unduh dan kompilasi Open Messaging Benchmark.

    1. 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/
    2. Ubah file konfigurasi repositori Maven untuk mempercepat unduhan.

      vi $HOME/apache-maven-3.8.8/conf/settings.xml

      Tambahkan 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>
    3. Unduh dan kompilasi kode sumber Open Messaging Benchmark.

      git clone https://github.com/openmessaging/benchmark.git
      cd benchmark && mvn clean verify -DskipTests
  2. Tentukan alamat IP privat instance yang diaktifkan Broker dalam file kafka-throughput.yaml.

    vi $HOME/benchmark/driver-kafka/kafka-throughput.yaml

    Dalam file kafka-throughput.yaml, atur parameter bootstrap.servers ke 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=1200000
  3. Tentukan 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.yaml

    Ubah 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 Broker dihitung sebagai 12 Gbit/s dibagi 3, yang sama dengan 4 Gbit/s (atau 512 MB/s). Mengingat pengujian dilakukan dalam direktori workloads, di mana ukuran setiap pesan adalah 1 KB. Laju pengiriman pesan dihitung sebagai 512 MB/s dibagi 1 KB, yang sama dengan 524.288. Dalam hal ini, ubah parameter producerRate: <Message sending rate> menjadi producerRate: 524288 dalam file. Dalam pengujian aktual, atur laju pengiriman pesan berdasarkan kebutuhan bisnis Anda.

  4. 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.yaml

    Selama pengujian performa Kafka, Anda dapat melakukan operasi berikut secara bersamaan:

    • Jalankan perintah smcss -a di jendela lain pada instance pengujian stres untuk memeriksa apakah SMC-R digunakan untuk mentransmisikan pesan.

    • Jalankan perintah sar pada masing-masing dari tiga instance yang diaktifkan Broker untuk memeriksa pemanfaatan CPU. Misalnya, perintah sar 1 20 menunjukkan 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.yaml
    Penting

    Untuk mencegah data pengujian yang tersisa memengaruhi pengujian performa saat eRDMA dinonaktifkan, hapus catatan Broker dan ZooKeeper serta mulai ulang Broker dan Zookeeper pada instance.

    Hapus Catatan Broker dan Zookeeper serta Mulai Ulang Broker dan Zookeeper

    • Hentikan Zookeeper pada instance yang diaktifkan Zookeeper dan hapus catatan Zookeeper.

      bash $HOME/kafka_2.13-3.5.0/bin/zookeeper-server-stop.sh
      rm -rf /tmp/zookeeper/
    • Mulai ulang ZooKeeper pada instance yang diaktifkan 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
    • Hentikan Broker pada setiap instance yang diaktifkan Broker dan hapus catatan Broker.

      bash $HOME/kafka_2.13-3.5.0/bin/kafka-server-stop.sh
      rm -rf $HOME/kafka-logs/
    • Mulai ulang Broker pada setiap instance yang diaktifkan Broker.

      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
      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
      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
      • Ganti <zookeeper ip> dengan alamat IP privat instance yang diaktifkan Zookeeper.

      • Jika Anda menguji performa tanpa menggunakan fitur eRDMA, hapus parameter smc_run dari perintah.

  5. 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. avg mewakili latensi rata-rata, 99% mewakili latensi P99, dan 999% mewakili latensi P999.