すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:高スループット、低レイテンシーのメッセージングを実現する eRDMA を使用した Kafka クラスターのデプロイ

最終更新日:May 16, 2026

eRDMA 対応の Elastic Compute Service (ECS) インスタンスに Kafka クラスターをデプロイして、ノード間のレイテンシーと CPU オーバーヘッドを削減し、パフォーマンスの向上をベンチマークで測定します。

説明
  • Kafka は、データストリームを処理・保存する分散ストリーム処理プラットフォームであり、リアルタイムのメッセージパブリッシングとサブスクリプションをサポートします。Kafka は、ログ集約、イベントソーシング、リアルタイム分析などのシナリオで広く使用されています。詳細については、「Kafka ドキュメント」をご参照ください。

  • eRDMA は、Alibaba Cloud が開発したリモートダイレクトメモリアクセス (RDMA) サービスで、低レイテンシー、高スループット、高弾力性を実現します。詳細については、「概要」をご参照ください。

ステップ1:ECS インスタンスの準備

Kafka クラスターをデプロイする前に、ブローカー、ZooKeeper、およびストレステスト用の ECS インスタンスを準備します。

  • ブローカーインスタンスは、コアデータノードとしてメッセージを保存、転送、管理します。

  • ZooKeeper インスタンスは、Kafka クラスターの分散コーディネーションを処理します。

  • ストレステストインスタンスは、Kafka クラスターのパフォーマンスをベンチマークで測定します。

この例では、5 つの ECS インスタンス (ZooKeeper 1 つ、ブローカー 3 つ、ストレステスト 1 つ) を使用します。次の表に、設定要件を示します。

重要

選択するインスタンスタイプは eRDMA をサポートしている必要があります。サポートされているインスタンスタイプについては、「エンタープライズレベルのインスタンスで eRDMA を設定」の「制限事項」をご参照ください。

目的

インスタンス要件

ディスク要件

ネットワーク要件

イメージ要件

ブローカー用インスタンス

3 つのインスタンス。この例では ecs.g8a.2xlarge を使用します。

PL3 のエンタープライズ SSD (ESSD)。ビジネス要件に基づいて容量を選択します。

  • インスタンスにパブリック IP アドレスを設定します。

  • すべてのインスタンスを同じ Virtual Private Cloud (VPC) にデプロイします。同じ VPC 内のインスタンスは、デフォルトで内部ネットワークを介して通信します。

  • インスタンスで eRDMA を有効にします。詳細については、「エンタープライズレベルのインスタンスで eRDMA を設定」をご参照ください。

Alibaba Cloud Linux 3.2104 LTS 64 ビット。

ZooKeeper 用インスタンス

1 つのインスタンス。この例では ecs.g8a.xlarge を使用します。

なし。

ストレステストインスタンス

1 つのインスタンス。この例では ecs.g8a.16xlarge を使用します。

なし。

ステップ2:必要なツールと Kafka のインストール

ステップ1 の各 ECS インスタンスにログインし、SMC-R、Java、Kafka をインストールします。

説明

eRDMA には、eRDMA リソースを管理するカーネル空間プロトコルスタックである SMC-R が必要です。詳細については、「SMC の使用」をご参照ください。

  1. すべての ECS インスタンスにログインします。

    詳細については、「パスワードまたはキーを使用して Linux インスタンスに接続」をご参照ください。

  2. (必要な場合) uname -r を実行してカーネルバージョンを確認します。カーネルバージョンが 5.10.134-16.3 以降であることを確認します。5.10.134-16.3 より前のバージョンの場合は、カーネルをアップグレードします。

    sudo yum update kernel
    sudo reboot
  3. 各インスタンスに smc-tools をインストールします。

    sudo yum install smc-tools -y
  4. 各インスタンスで eRDMA が有効になっていることを確認します。

    smcr dev

    出力例:

    Net-Dev IB-Dev IB-P IB-State Type Crit #Links PNET-ID 
    eth0 erdma_0 1 ACTIVE 0x107f No 0 
  5. 各インスタンスで IPv6 を無効にします。

    説明

    Alibaba Cloud の eRDMA および SMC デバイスは IPv6 をサポートしていません。IPv6 を無効にすると、トラフィックが IPv4 RDMA チャネルを通過します。

    sudo sysctl net.ipv6.conf.all.disable_ipv6=1
  6. Java と 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. 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

ステップ3:Kafka の ZooKeeper とブローカーの起動

  1. すべての ECS インスタンスにログインします。

  2. 各インスタンスのプライベート IP アドレスとホスト名のマッピングを /etc/hosts ファイルに追加します。

    image

  3. ZooKeeper インスタンスで 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. 各ブローカーインスタンスでブローカーを起動します。

    説明

    eRDMA なしでテストするには、コマンドから smc_run パラメーターを削除します。

    • 最初のブローカーインスタンスで、ブローカー ID を 0 に設定し、ブローカーを起動します。<zookeeper ip> を ZooKeeper インスタンスのプライベート IP アドレスに置き換えます。

      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
    • 2 番目のブローカーインスタンスで、ブローカー ID を 1 に設定し、ブローカーを起動します。<zookeeper ip> を ZooKeeper インスタンスのプライベート IP アドレスに置き換えます。

      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
    • 3 番目のブローカーインスタンスで、ブローカー ID を 2 に設定し、ブローカーを起動します。<zookeeper ip> を ZooKeeper インスタンスのプライベート IP アドレスに置き換えます。

      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

ステップ4:Kafka のパフォーマンステスト

ベンチマークツールをダウンロードし、ネットワーク帯域幅を最大化するように設定します。 eRDMA を使用した場合と使用しない場合で Kafka のパフォーマンスをテストし、結果を比較します。

  1. ストレステストインスタンスにログインし、Open Messaging Benchmark をダウンロードしてコンパイルします。

    1. Open Messaging Benchmark のコンパイラである Maven をダウンロードしてインストールします。

      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. ダウンロードを高速化するために Maven ミラーを設定します。

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

      以下のコンテンツを settings.xml mirrors タグに追加し、ファイルを保存して閉じます。

      <mirror>
          <id>nexus-aliyun</id>
          <mirrorOf>central</mirrorOf>
          <name>Nexus aliyun</name>
          <url>http://maven.aliyun.com/nexus/content/groups/public</url>
      </mirror>
    3. Open Messaging Benchmark をダウンロードしてコンパイルします。

      git clone https://github.com/openmessaging/benchmark.git
      cd benchmark && mvn clean verify -DskipTests
  2. kafka-throughput.yaml ファイルでブローカーの IP アドレスを設定します。

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

    bootstrap.servers を Broker インスタンスのプライベート IP アドレスに設定します: <Broker 0 のプライベート IP アドレス>:9092,<Broker 1 のプライベート IP アドレス>:9092,<Broker 2 のプライベート IP アドレス>: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. 利用可能なネットワーク帯域幅を飽和させるようにメッセージ送信レートを設定します。

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

    producerRate: <メッセージ送信レート> を変更します。このレートは、Broker が有効なインスタンスの利用可能な帯域幅/単一メッセージのサイズ として計算されます。

    この例では、各ブローカーは ecs.g8a.2xlarge (最大 4 Gbit/s) を使用します。 3 つのブローカーの合計帯域幅は 12 Gbit/s です。 Kafka の 3 レプリカメカニズムにより、ブローカーインスタンスの利用可能な帯域幅は 12/3 = 4 Gbit/s (512 MB/s) になります。 workloads ディレクトリ内のメッセージサイズが 1 KB の場合、メッセージ送信レートは 512 MB/s / 1 KB = 524,288 になります。 producerRate: <メッセージ送信レート>producerRate: 524288 に設定します。 実際の要件に基づいてレートを調整してください。

  4. 次のいずれかの方法を使用して、Kafka クラスターのパフォーマンスをテストします。

    eRDMA が有効な場合のパフォーマンステスト

    smc_run $HOME/benchmark/bin/benchmark --drivers $HOME/benchmark/driver-kafka/kafka-throughput.yaml $HOME/benchmark/workloads/1-topic-100-partitions-1kb-4p-4c-200k.yaml

    テスト中に、次のことも実行できます。

    • ストレス テスト インスタンス上の別のウィンドウで smcss -a を実行し、SMC-R がメッセージを送信していることを確認します。

    • 各 Broker インスタンスで sar を実行し、CPU 使用率を確認します。 たとえば、sar 1 20 を実行すると、1 秒に 1 回、20 回サンプリングされます。 3 つすべての Broker インスタンスの CPU 使用率を合計して、全体の値を求めます。

    eRDMA が無効な場合のパフォーマンステスト

    $HOME/benchmark/bin/benchmark --drivers $HOME/benchmark/driver-kafka/kafka-throughput.yaml $HOME/benchmark/workloads/1-topic-100-partitions-1kb-4p-4c-200k.yaml
    重要

    残存するテストデータが eRDMA を使用しないテストに影響を与えないように、ブローカーと ZooKeeper のレコードを削除し、両方のサービスを再起動します。

    ブローカーと ZooKeeper の削除と再起動

    • ZooKeeper を停止し、そのレコードを削除します。

      bash $HOME/kafka_2.13-3.5.0/bin/zookeeper-server-stop.sh
      rm -rf /tmp/zookeeper/
    • 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
    • 各ブローカーインスタンスでブローカーを停止し、レコードを削除します。

      bash $HOME/kafka_2.13-3.5.0/bin/kafka-server-stop.sh
      rm -rf $HOME/kafka-logs/
    • 各ブローカーインスタンスでブローカーを再起動します。

      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
      • <zookeeper ip> を ZooKeeper インスタンスのプライベート IP アドレスに置き換えます。

      • eRDMA なしでテストするには、コマンドから smc_run パラメーターを削除します。

  5. 両方のテストのレイテンシー結果を比較して、eRDMA のパフォーマンスへの影響を評価します。

    最後の Aggregated Pub Latency (ms) エントリを見つけます。avg は平均レイテンシー、99% は P99 レイテンシー、999% は P999 レイテンシーです。