All Products
Search
Document Center

Elastic Compute Service:Terapkan kluster Kafka dengan eRDMA untuk pengiriman pesan ber-throughput tinggi dan latensi rendah

Last Updated:May 16, 2026

Terapkan kluster Kafka pada Instance ECS yang diaktifkan eRDMA untuk mengurangi latensi antar-node dan overhead CPU, lalu benchmark peningkatan kinerjanya.

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

Penting

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.

  • Konfigurasikan alamat IP publik untuk instans.

  • Terapkan semua instans dalam Virtual Private Cloud (VPC) yang sama. Instans dalam VPC yang sama berkomunikasi melalui jaringan internal secara default.

  • Aktifkan eRDMA pada instans. Lihat Konfigurasikan eRDMA pada Instans Tingkat Perusahaan.

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.

Catatan

eRDMA memerlukan SMC-R, tumpukan protokol di kernel-space yang mengelola resource eRDMA. Lihat Use SMC.

  1. Login ke semua instance ECS.

    Lihat Menghubungkan ke instans Linux menggunakan kata sandi atau kunci.

  2. (Diperlukan kondisional) Jalankan uname -r untuk memeriksa versi kernel. Pastikan versi kernel adalah 5.10.134-16.3 atau lebih baru. Jika lebih lama dari 5.10.134-16.3, upgrade kernel:

    sudo yum update kernel
    sudo reboot
  3. Instal smc-tools pada setiap instans:

    sudo yum install smc-tools -y
  4. Verifikasi bahwa eRDMA diaktifkan pada setiap instans:

    smcr dev

    Contoh output:

    Net-Dev IB-Dev IB-P IB-State Type Crit #Links PNET-ID 
    eth0 erdma_0 1 ACTIVE 0x107f No 0 
  5. Nonaktifkan IPv6 pada setiap instans.

    Catatan

    Perangkat 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
  6. 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
  7. 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

  1. Login ke semua instance ECS.

  2. Tambahkan pemetaan antara alamat IP pribadi dan hostname setiap instans ke file /etc/hosts.

    image

  3. 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
  4. Jalankan Broker pada setiap instance Broker.

    Catatan

    Untuk menguji tanpa eRDMA, hapus parameter smc_run dari perintah.

    • Pada instance Broker pertama, atur ID Broker menjadi 0 dan 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 1 dan 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 2 dan 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.

  1. Login ke instance uji stres, lalu unduh dan kompilasi Open Messaging Benchmark.

    1. 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/
    2. Konfigurasikan mirror Maven untuk mempercepat pengunduhan.

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

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

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

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

    Atur bootstrap.servers ke 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
  3. Atur laju pengiriman pesan agar memenuhi bandwidth jaringan yang tersedia.

    vi $HOME/benchmark/workloads/1-topic-100-partitions-1kb-4p-4c-200k.yaml

    Ubah 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 instance adalah 12/3 = 4 Gbit/s (512 MB/s). Dengan ukuran pesan 1 KB dalam direktori workloads, message sending rate adalah 512 MB/s / 1 KB = 524.288. Atur producerRate: <Message sending rate> menjadi producerRate: 524288. Sesuaikan laju tersebut berdasarkan kebutuhan aktual Anda.

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

    Selama pengujian, Anda juga dapat:

    • Jalankan smcss -a di jendela lain pada instance uji stres untuk memverifikasi SMC-R sedang mengirimkan pesan.

    • Jalankan sar pada setiap instance Broker untuk memeriksa utilisasi CPU. Misalnya, sar 1 20 mengambil 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.yaml
    Penting

    Untuk mencegah data uji sisa memengaruhi pengujian non-eRDMA, hapus catatan Broker dan ZooKeeper lalu mulai ulang kedua layanan tersebut.

    Delete and restart Broker and ZooKeeper

    • Hentikan ZooKeeper dan hapus catatannya:

      bash $HOME/kafka_2.13-3.5.0/bin/zookeeper-server-stop.sh
      rm -rf /tmp/zookeeper/
    • Mulai ulang 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 Broker dan hapus catatannya:

      bash $HOME/kafka_2.13-3.5.0/bin/kafka-server-stop.sh
      rm -rf $HOME/kafka-logs/
    • Mulai ulang Broker pada setiap instance 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 pribadi instance ZooKeeper.

      • Untuk menguji tanpa eRDMA, hapus parameter smc_run dari perintah.

  5. Bandingkan hasil latensi dari kedua pengujian untuk mengevaluasi dampak kinerja eRDMA.

    Cari entri terakhir Aggregated Pub Latency (ms). avg adalah latensi rata-rata, 99% adalah latensi P99, dan 999% adalah latensi P999.