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

Elastic Compute Service:eRDMA を使用したパフォーマンス専有型 Kafka クラスターのデプロイ

最終更新日:Apr 03, 2026

eRDMA 対応の Elastic Compute Service (ECS) インスタンスに Kafka クラスターをデプロイすることで、eRDMA の低レイテンシー、高スループット、低 CPU 使用率という利点を活用できます。これにより、Kafka クラスター内のノード間のデータ転送効率が最適化され、高スループットと低レイテンシーが要求されるアプリケーションに最適です。このトピックでは、eRDMA 対応の ECS インスタンスに Kafka クラスターをデプロイし、eRDMA のパフォーマンス上の利点をテストする方法について説明します

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

  • eRDMA (Elastic Remote Direct Memory Access) は、Alibaba Cloud のパフォーマンス専有型 RDMA ネットワークサービスであり、低レイテンシー、高スループット、高い弾力性を特徴としています。詳細については、「eRDMA の概要」をご参照ください。

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

クラスターをデプロイするには、ブローカーおよび ZooKeeper サービスをホストし、ストレステスト環境をデプロイするために、複数の ECS インスタンスを準備する必要があります。

  • ブローカー:クラスターの中核となるデータノードで、メッセージの保存、転送、管理を担当します。

  • ZooKeeper:Kafka クラスターに分散サービスコーディネーションと管理を提供します。

  • ストレステストインスタンス:デプロイされた Kafka クラスターのパフォーマンスを検証するために使用します。

このトピックでは、1 つの ZooKeeper インスタンス、3 つのブローカーインスタンス、1 つのストレステストインスタンスの計 5 つの ECS インスタンスを使用します。次の表に、インスタンスの構成要件を示します。

重要

選択するインスタンスタイプは eRDMA をサポートしている必要があります。eRDMA がサポートするインスタンスタイプの一覧については、「制限事項」をご参照ください。

目的

必要なインスタンス

クラウドディスク要件

ネットワーク要件

イメージ要件

ブローカーのホスティング

3 インスタンス。インスタンスタイプの例:ecs.g8a.2xlarge

ESSD PL3 クラウドディスクを選択し、必要に応じて容量を指定します。

  • すべてのインスタンスにパブリック IP アドレスが割り当てられている必要があります。

  • すべてのインスタンスが同じ VPC 内にあり、デフォルトで内部ネットワークを介して相互に通信できる必要があります。

  • すべてのインスタンスで eRDMA を有効にする必要があります。詳細については、「エンタープライズレベルのインスタンスで eRDMA を有効にする」をご参照ください。

Alibaba Cloud Linux 3.2104 LTS 64 ビット

ZooKeeper のホスティング

1 インスタンス。インスタンスタイプの例:ecs.g8a.xlarge

特別な要件はありません

性能テストの実行

1 インスタンス。インスタンスタイプの例:ecs.g8a.16xlarge

特別な要件はありません

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

ステップ 1 で準備した 5 つの ECS インスタンスにログインして、SMC-R、Java、および Kafka をインストールします。

説明

eRDMA を使用する場合、SMC-R をデプロイする必要があります。SMC-R はカーネル空間で実行され、SMC-R プロトコルスタックが eRDMA リソースを使用、管理、および維持します。詳細については、「Shared Memory Communications (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. すべてのインスタンスにログインします。

  2. 各インスタンスの /etc/hosts ファイルを変更します。すべてのインスタンスのプライベート 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. 3 つのブローカーインスタンスでブローカーを起動します。

    説明

    eRDMA 機能を使用せずにテストする場合は、コマンドから smc_run を削除してください。

    • 最初のブローカーインスタンスで、ブローカー ID を broker 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 を broker 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 を broker 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:性能テスト

ベンチマークツールをダウンロードし、利用可能な最大ネットワーク帯域幅の環境をシミュレートします。次に、eRDMA 機能を有効にした場合と無効にした場合で Kafka の性能をテストし、テスト結果を使用して eRDMA が Kafka クラスターに提供する性能向上を比較します。

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

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

      wget https://archive.apache.org/dist/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz
      tar -xf apache-maven-3.9.9-bin.tar.gz
      export PATH=$PATH:$HOME/apache-maven-3.9.9/bin/
    2. ダウンロードを高速化するために Maven ミラーを設定します。

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

      mirrors タグ内の settings.xml ファイルに次の内容を追加します。その後、ファイルを保存して終了します。

      <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 でブローカーアドレスを設定します。

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

    ファイル内で、bootstrap.servers=localhost:9092bootstrap.servers=<broker0 のプライベート IP アドレス>:9092,<broker1 のプライベート IP アドレス>:9092,<broker2 のプライベート 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. Kafka のメッセージ送信レートを設定して、利用可能な最大ネットワーク帯域幅の環境をシミュレートし、Kafka クラスターの性能をテストします。

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

    producerRate: <メッセージ送信レート> パラメーターを変更します。メッセージ送信レートは、数式:メッセージ送信レート = 利用可能なブローカー帯域幅 / 単一メッセージのサイズ を使用して計算されます。

    この例では、ブローカーインスタンスタイプは ecs.g8a.2xlarge で、最大ネットワーク帯域幅は 4 Gbit/s です。3 つのブローカーインスタンスの合計帯域幅は 12 Gbit/s です。Kafka は 3 レプリカメカニズムを使用するため、実際に利用可能な帯域幅は合計帯域幅の約 3 分の 1 です。したがって、利用可能なブローカー帯域幅 は 12 Gbit/s / 3 = 4 Gbit/s (512 MB/s) です。テストは単一メッセージのサイズが 1 KB の workloads ディレクトリで実行されるため、メッセージ送信レート は 512 MB/s / 1 KB = 524,288 となります。したがって、ファイル内の producerRate: <メッセージ送信レート>producerRate: 524288 に変更する必要があります。実際のテストでは、ビジネス要件に基づいてこの値を調整してください。

  4. 次の 2 つのシナリオで 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-2000k.yaml

    Kafka テストの実行中に、次の操作を実行できます:

    • ストレステストインスタンスの別のターミナルウィンドウで、smcss -a コマンドを実行して、接続がメッセージ送信に SMC-R を使用していることを確認します。

    • 3 つのブローカーインスタンスで、sar コマンドを実行して CPU 使用率を確認します。たとえば、sar 1 20 コマンドは 1 秒ごとに 20 回使用率をサンプリングしてから終了します。3 つのブローカーインスタンスの CPU 使用率の値を合計して、総 CPU 使用率を求めることができます。

    eRDMA を使用しないテスト

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

    eRDMA を使用したテストの後、レコードをクリアし、ブローカーと Zookeeper を再起動します。これにより、残存するテストデータが eRDMA を使用しないテストに影響を与えるのを防ぎます。

    レコードのクリアとブローカーおよび Zookeeper の再起動

    • Zookeeper インスタンスで、Zookeeper を停止し、そのレコードをクリアします。

      bash $HOME/kafka_2.13-3.5.0/bin/zookeeper-server-stop.sh
      rm -rf /tmp/zookeeper/
    • 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
    • 3 つのブローカーインスタンスのそれぞれで、ブローカーを停止し、そのレコードをクリアします。

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

      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 が Kafka クラスターにもたらす性能向上を評価します。

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